上文《詳細講解redis數據結構(記憶體模型)以及常用命令》介紹了redis的數據類型以及常用命令,本文我們來學習下redis的一些高級特性。目錄如下: 安全性設置 設置客戶端操作秘密 客戶端授權方式 主從複製 主從複製的特點 主從複製的過程 配置主從伺服器 事務與鎖 事務開啟與取消 樂觀鎖 持久化機 ...
上文《詳細講解redis數據結構(記憶體模型)以及常用命令》介紹了redis的數據類型以及常用命令,本文我們來學習下redis的一些高級特性。目錄如下:
安全性設置
設置客戶端操作秘密
客戶端授權方式
主從複製
主從複製的特點
主從複製的過程
配置主從伺服器
事務與鎖
事務開啟與取消
樂觀鎖
持久化機制
RDB方式
AOF方式
發佈以及訂閱消息
安全性設置
設置客戶端操作秘密
redis安裝好後,預設情況下登陸客戶端和使用命令操作時不需要密碼的。某些情況下,為了安全起見,我們可以設置在客戶端連接後進行任何操作之前都要進行密碼驗證。修改redis.conf進行配置。
[root@localhost ~]# vi /usr/local/redis/etc/redis.conf
#######################SECURITY ##############################
......
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
# requirepass foobared
requirepass redis129
# Command renaming.
如上,找到# requirepass foobared這一行,在下麵添加“requirepass 密碼”一行設置密碼。設置好密碼後,有兩種方式授權客戶端進行操作。
客戶端授權方式
(1)登錄時使用-a參數指定客戶端密碼,如下
[root@localhost ~]# /usr/local/redis/bin/redis-cli -h 192.168.2.129 -p 6379 -a redis129
192.168.2.129:6379> keys *
1) "myzset"
192.168.2.129:6379>
(2)登錄客戶端後使用auth命令進行授權,如下
[root@localhost ~]# /usr/local/redis/bin/redis-cli -h 192.168.2.129 -p 6379
192.168.2.129:6379> keys *
(error) NOAUTH Authentication required.
192.168.2.129:6379> auth redis129
OK
192.168.2.129:6379> keys *
1) "myzset"
192.168.2.129:6379>
主從複製
主從複製,即主伺服器與從伺服器之間數據備份的問題。Redis 支持簡單且易用的主從複製(master-slave replication)功能, 該功能可以讓從伺服器(slave server)成為主伺服器(master server)的精確複製品。
主從複製的特點
(1)一個主伺服器可以有多個從伺服器。
(2)不僅主伺服器可以有從伺服器, 從伺服器也可以有自己的從伺服器。
(3)Redis 支持非同步複製和部分複製(這兩個特性從Redis 2.8開始),主從複製過程不會阻塞主伺服器和從伺服器。
(4)主從複製功能可以提升系統的伸縮性和功能,如讓多個從伺服器處理只讀命令,使用複製功能來讓主伺服器免於頻繁的執行持久化操作。
主從複製的過程
下麵我們用一個圖來講解redis主從複製的過程。
Redis主從複製過程示意圖
從上面的示意圖可以看出,主伺服器與從伺服器建立連接之後,Redis主從複製過程主要有下麵幾步:
(1)從伺服器都將向主伺服器發送一個 SYNC 命令。
(2)主伺服器接到 SYNC 命令後開啟一個後臺子進程並開始執行 BGSAVE,併在保存操作執行期間, 將所有新執行的寫入命令都保存到一個緩衝區裡面。
(3)當 BGSAVE 執行完畢後, 主伺服器將執行保存操作所得的 .rdb 文件發送給從伺服器, 從伺服器接收這個 .rdb 文件, 並將文件中的數據載入到記憶體中。
(4)主伺服器會以 Redis 命令協議的格式, 將寫命令緩衝區中積累的所有內容都發送給從伺服器。
配置從伺服器
redis配置一個從伺服器非常簡單, 只要在從伺服器的配置文件redis.conf中增加主伺服器的IP地址和埠號就可以,如果主伺服器設置了客戶端密碼,還需要在從伺服器中配置主伺服器的密碼,如下
##########################REPLICATION ###############################
# Master-Slave replication. Use slaveof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
......
# slaveof <masterip> <masterport>
slaveof 192.168.2.129 6379
# If the master is password protected (using the "requirepass" configuration
# directive below) it is possible to tell the slave to authenticate before
# starting the replication synchronization process, otherwise the master will
# refuse the slave request.
#
# masterauth <master-password>
masterauth redis129
事務與鎖
Redis 的事務支持相對簡單,MULTI 、 EXEC 、 DISCARD 和 WATCH 這四個命令是 Redis 事務的基礎。
事務開啟與取消
l MULTI 開啟一個事務。當客戶端發出了MULTI 命令時,客戶端和服務端的連接就進入了一個事務上下文的狀態。MULTI 執行之後, 客戶端可以繼續向伺服器發送任意多條命令, 這些命令不會立即被執行, 而是被放到一個隊列中, 當 EXEC 命令被調用時, 所有隊列中的命令才會被執行。
l EXEC 順序執行事務隊列中的命令。
192.168.2.129:6379> multi
OK
192.168.2.129:6379> set name "zhangsan"
QUEUED
192.168.2.129:6379> set age 20
QUEUED
192.168.2.129:6379> exec
1) OK
2) OK
192.168.2.129:6379> keys *
1) "age"
2) "name"
192.168.2.129:6379>
l DISCARD 取消事務。當執行 DISCARD 命令時, 事務會被放棄, 事務隊列會被清空, 並且客戶端會從事務狀態中退出。
192.168.2.129:6379> multi
OK
192.168.2.129:6379> set name2 "lisi"
QUEUED
192.168.2.129:6379> set age 22
QUEUED
192.168.2.129:6379> discard
OK
192.168.2.129:6379> exec
(error) ERR EXEC without MULTI
192.168.2.129:6379>
樂觀鎖
<