先了解清楚sentinel和cluster的差別,再學習使用python操作redis的API,感覺會更加清晰明白。
1、redis sentinel和cluster的區別
sentinel遵循主從結構。最小的sentinel會有一個master節點和兩個slave節點,三個節點上均有sentinel守護進程在運行。當master掛掉時,會由其余節點投票產生新的master;但是當多數節點都不可用時,例如:三個節點中有兩個節點不可用,則failover失敗。
數據存儲時,master節點負責管理數據,因此所有的寫操作均要通過master節點。
cluster則是平行結構。可以理解為是全部N個節點都是相同的replicas,其中有1個replica作為master,其余N-1個同樣的節點作為slave。當master掛掉時,cluster會自動指定新的master。
數據存儲時,cluster使用哈希槽來進行數據的統一管理,寫操作無需通過master操作。
二者的區別如下:
1)sentinel的多數節點掛掉時,failover失敗;而cluster在這種情況依然能夠正常failover。
2)sentinel需要通過master定位數據所在節點,通過master寫入;而cluster統一管理和寫入數據。
2、python操作sentinel和cluster實例
關鍵是搞清楚使用的庫和sentinel、cluster的操作流程。
操作sentinel,向集合中寫入數據:
from?redis.sentinel?import?Sentinel
#?創建sentinel對象
rs?=?Sentinel([('localhost',?26379)],?socket_timeout=0.1)
# 指定redis實例名為ux_exp
#?創建到master的連接,用于寫操作
master?=?rs.master_for('ux_exp',?socket_timeout=0.1)
# 寫入數據xxx到16001_top集合
master.sadd('16001_top', 'xxxx')
# 隨機讀取一個16001_top集合的一個元素
master.srandmember('16001_top',2)
操作cluster,向redis中寫入鍵-值對:
from?rediscluster?import?StrictRedisCluster
# 配置信息
startup_nodes?=?[{"host":?"127.0.0.1",?"port":?"7000"}]
#?創建cluster對象
rc?=?StrictRedisCluster(startup_nodes=startup_nodes,?decode_responses=True)
# 插入數據
rc.set("foo",?"bar")
# 讀取數據
print(rc.get("foo"))
總結,先搞清楚sentinel和cluster的基本原理,才能比較容易的使用python進行相應的操作。