鍍金池/ 問(wèn)答/人工智能  Python/ python如何選擇redis數(shù)據(jù)庫(kù)?

python如何選擇redis數(shù)據(jù)庫(kù)?

選擇redis數(shù)據(jù)庫(kù),select 1,select 2

但是在python中是怎么操作的?我只知道r = redis.Redis(host='localhost',port=6379,db=0)

這個(gè)db如何切換,難道每次都要redis.Redis(host='localhost',port=6379,db=1),redis.Redis(host='localhost',port=6379,db=2)嗎

回答
編輯回答
擱淺

是的,目前只能這樣。
原因是redis-py為了保證Redis實(shí)例的線程安全,沒(méi)有實(shí)現(xiàn)SELECT指令

Redis 客戶端實(shí)例可以安全地在線程間共享。從內(nèi)部實(shí)現(xiàn)來(lái)說(shuō),只有在命令執(zhí)行時(shí)才獲取連接實(shí)例,完成后直接返回連接池,命令永不修改客戶端實(shí)例的狀態(tài)。但是,有一點(diǎn)需要注意:SELECT 命令。SELECT 命令允許切換當(dāng)前連接使用的數(shù)據(jù)庫(kù)。新的數(shù)據(jù)庫(kù)保持被選中狀態(tài),直到選中另一個(gè)數(shù)據(jù)庫(kù)或連接關(guān)閉。這會(huì)導(dǎo)致在返回連接池時(shí),連接可能指定了別的數(shù)據(jù)庫(kù)。因此,redis-py 沒(méi)有在客戶端實(shí)例中實(shí)現(xiàn) SELECT 命令。如果要在同一個(gè)應(yīng)用中使用多個(gè) Redis 數(shù)據(jù)庫(kù),應(yīng)該給第一個(gè)數(shù)據(jù)庫(kù)創(chuàng)建獨(dú)立的客戶端實(shí)例(可能也需要獨(dú)立的連接池)。

參考

  1. 官方文檔-線程安全
  2. 中文文檔-線程安全
2018年5月20日 18:54
編輯回答
筱饞貓

程序是死的,但規(guī)則是人定的,官網(wǎng)不讓這么做,并不是說(shuō)不能實(shí)現(xiàn),是會(huì)造成數(shù)據(jù)庫(kù)指向的錯(cuò)誤。其實(shí)你在不怕這種錯(cuò)誤的情況下,自己去看看redis模塊的各種方法源碼,在方法定義的地方自己加上一個(gè)select方法就可以了,不忘了給Redis類(lèi)一個(gè)current_db屬性來(lái)標(biāo)記當(dāng)前數(shù)據(jù)庫(kù)。當(dāng)然我沒(méi)試過(guò),只是提供一種思路。

2017年1月22日 20:32