日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis高级应用

發(fā)布時間:2025/3/21 数据库 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis高级应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redis高級實用特性分6部分:


1、安全性

設置客戶端連接后進行任何其他操作時,需要使用密碼

修改redis.conf配置文件,requirepass password指令就是用來設置密碼的

修改完配置文件后要重啟redis服務

重啟后,發(fā)現在命令行執(zhí)行操作時,會有以下提示。此時需要用auth password 來授權

1 2 3 4 5 6 127.0.0.1:6379>?keys?* (error)?NOAUTH?Authentication?required. 127.0.0.1:6379>?auth?redis123 OK 127.0.0.1:6379>?keys?* (empty?list?or?set)


如果不希望在命令行輸入密碼來完成授權,則可以在登錄客戶端時,輸入密碼

1 2 3 [root@localhost?init.d]#?/usr/local/redis/bin/redis-cli?-a?redis123 127.0.0.1:6379>?keys?* (empty?list?or?set)



2、主從復制

Redis主從復制配置和使用非常簡單。通過主從復制可以允許多個slave server擁有和master server相同的數據庫副本


主從復制的工作原理:

1、slave與master建立連接后,發(fā)送sync同步命令

2、master會啟動一個后臺進程,將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令并緩存

3、后臺完成保存后,將此文件發(fā)送給slave

4、slave將此文件保存到硬盤上


主從復制的特點:

a、Master可以擁有多個slave

b、多個slave可以連接同一個master外,還可以連接到其他slave(這個特性是為了防止master出現故障后,slave無法進行同步,如果slave還連接了其他slave,那么master掛掉后,這個slave就會變成master,接管服務)

c、主從復制不會阻塞master,在同步數據時,master可以繼續(xù)處理client請求

d、提高系統(tǒng)的伸縮性


主從復制的配置

在slava的配置文件中加入以下配置:

slaveof 192.168.1.1 6379 #指定master的ip和端口

masterauth PASSWORD ?# 這是master的密碼


注意:主從配置的注意事項:

master、slave的配置文件中bind 127.0.0.1 這條配置改成eth0網卡的ip地址,否則redis的端口默認監(jiān)聽在127.0.0.1上。這樣slave 到master的端口不通。

更改bind 的IP地址后,進入客戶端時使用命令:

1 $redis_home/bin/redis-cli?-h?172.16.206.140

即使用-h參數指定eth0網卡的IP地址,默認是127.0.0.1?



3、事務處理

Redis對事務的處理目前還比較簡單,Redis只能保證一個client發(fā)起的事物中的命令可以連續(xù)的執(zhí)行,而中間不會插入其他client的命令。當一個client在一個連接中發(fā)出multi命令時,這個連接會進入一個事務上下文,該連接后續(xù)的命令不會立即執(zhí)行,而是先放到一個隊列中,當執(zhí)行exec命令時,redis會順序的執(zhí)行隊列中的命令

例如:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 172.16.206.142:6379>?set?age?27 OK 172.16.206.142:6379>? 172.16.206.142:6379>?get?age "27" 172.16.206.142:6379>?multi OK 172.16.206.142:6379>?set?age?37 QUEUED 172.16.206.142:6379>?set?age?47\ QUEUED 172.16.206.142:6379>?set?age?47 QUEUED 172.16.206.142:6379>?exec 1)?OK 2)?OK 3)?OK 172.16.206.142:6379>?get?age "47"


discard:取消一個事務

1 2 3 4 5 6 7 8 9 10 11 12 172.16.206.142:6379>?get?age "47" 172.16.206.142:6379>?multi OK 172.16.206.142:6379>?set?age?100 QUEUED 172.16.206.142:6379>?set?age?200 QUEUED 172.16.206.142:6379>?discard OK 172.16.206.142:6379>?get?age "47"


事務回滾:

Redis不支持事務回滾,當隊列中有兩個事務,一個完成了另外一個沒有完成,那么沒有完成的那個事務不會影響整個事務。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 172.16.206.142:6379>?set?name?zeng OK 172.16.206.142:6379>?get?age "47" 172.16.206.142:6379>?multi OK 172.16.206.142:6379>?incr?age QUEUED 172.16.206.142:6379>?incr?name QUEUED 172.16.206.142:6379>?exec 1)?(integer)?48 2)?(error)?ERR?value?is?not?an?integer?or?out?of?range 172.16.206.142:6379>?get?name "zeng" 172.16.206.142:6379>? 172.16.206.142:6379>?get?age "48"


樂觀鎖:

watch命令會監(jiān)視給定的key,當exec時候如果監(jiān)視的key從調用watch后發(fā)生過變化,則整個事務會失敗。也可以調用watch多次監(jiān)視多個key,這樣就可以對指定的key加樂觀鎖了。


4、持久化機制

Redis是一個支持持久化的內存數據庫,也就是說redis需要經常將內存中的數據同步到硬盤來保證持久化。Redis支持兩種持久化方式:

1、snapshotting(快照)也是默認方式

2、Append-only file(aof)的方式


Snapshotting方式:

快照是默認的持久化方式,這種方式是將內存中數據以快照的方式寫入到二進制文件中,默認的文件名為dump.rdb.可以通過配置設置自動做持久化的方式。我們可以配置redis在n秒內如果超過m個key被修改就自動做快照

save 900 1 ?#900秒內如果超過1個key被修改,則發(fā)起快照保存

save 300 10 ?#300秒內如果超過10個key被修改,則發(fā)起快照保存

save 60 10000


aof方式:

由于快照方式是在一定時間間隔內做一次,所以如果redis意外down掉的話,就會丟失最后一次快照后的所有修改。

aof比快照方式有更好的持久化性,是由于在使用aof時,redis會將每一個收到的寫命令都通過 write函數追加到文件中,當redis重啟時會通過重新執(zhí)行文件中保存的寫命令來在內存中重建整個數據庫的內容

appendonly yes //啟用aof持久化方式

#appendfsync always //收到寫命令就立即寫入磁盤,最慢,但是保證完全的持久化

appendfsync everysec //每秒鐘寫入磁盤一次,在性能和持久化方面做了很好的折中

#appendfsync no //完全依賴os,性能最好,持久化沒有保證



5、發(fā)布訂閱消息

發(fā)布訂閱(pub/sub)是一種消息通信模式,主要的目的是解除消息發(fā)布者和消息訂閱者之間的耦合,Redis作為一個pub/sub的server,在訂閱者和發(fā)布者之間起到了消息路由的功能。訂閱者可以通過subscribe和psubscribe命令向redis server訂閱自己感興趣的消息類型,redis將信息類型稱為通道(channel)。當發(fā)布者通過publish命令向redis server發(fā)送特定類型的信息時,訂閱該信息類型的全部client都會收到此消息


測試:

Redis server開三個會話窗口,并進入redis客戶端命令行

終端一訂閱tv1、tv2兩個頻道

1 2 3 4 5 6 7 8 >?subscribe?tv1?tv2 Reading?messages...?(press?Ctrl-C?to?quit) 1)?"subscribe" 2)?"tv1" 3)?(integer)?1 1)?"subscribe" 2)?"tv2" 3)?(integer)?2


終端二訂閱tv2頻道

1 2 3 4 5 >?subscribe?tv1 Reading?messages...?(press?Ctrl-C?to?quit) 1)?"subscribe" 2)?"tv1" 3)?(integer)?1


終端三向tv1頻道發(fā)布消息hello

1 2 >publish?tv1?hello (integer)?2


結果:

終端一、二都收到消息:

1 2 3 1)?"message" 2)?"tv1" 3)?"hello"



6、虛擬內存的使用

Redis的虛擬內存與操作系統(tǒng)的虛擬內存不是一回事,但是思路和目的都是相同的。就是暫時把不經常訪問的數據從內存交換到磁盤中,從而騰出寶貴的內存空間用于其他需要訪問的數據。尤其是對于redis這樣的內存數據庫,內存總是不夠用的。除了可以將數據分割到多個redis server外。另外能夠提高數據庫容量的辦法就是使用虛擬內存把那些不經常訪問的數據交換到磁盤上。


配置如下:

vm-enabled yes ? ? ? ? ? ? ?#開啟vm功能

really-use-vm yes ? ? ? ? ? ?#確定使用虛擬內存,這條配置需要手動添加 ? ?

vm-swap-file ?/tmp/redis.swap ? #交換出來的value保存的文件路徑

vm-max-memory 1000000 ? ? ? ? #redis使用的最大內存上線

vm-page-size 32 ? ? ? ? ? ? #每個頁面的大小32字節(jié)

vm-pages 134217728 ? ? ? ? ? #最多使用多少個頁面

vm-max-threads 4 ? ? ? ? ? ?#用于執(zhí)行value對象換入的工作線程數量











本文轉自 曾哥最愛 51CTO博客,原文鏈接:http://blog.51cto.com/zengestudy/1854178,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的Redis高级应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。