在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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

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

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

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

回答
編輯回答
擱淺

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

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

參考

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

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

2017年1月22日 20:32