[英]Redis values set from Python are not reflecting in redis client
我已經安裝了redis
在我的OS X,並試圖設置和Python的3.5客戶端獲得Redis的一些值。 我在Redis服務器上(通過命令redis-server
)和redis-client在(通過命令redis-cli
打開)上。 這是我在Python上嘗試的方法:
import redis
r = redis.StrictRedis()
r.set("foo", "bar")
r.get("foo")
這將按預期打印bar
。 但是,如果我轉到redis-client提示符並嘗試get foo
,它將返回nil
。 以相同的方式,如果我在redis-client本身中設置了一個值,就像set boo too
一樣,則在客戶端中調用get boo
too
按預期返回,但是,如果在我的Python客戶端中運行r.get(boo)
,我None
。
有趣的是,它們在自己的實例之間同步。 因此,如果我打開另一個Python命令提示符並鍵入r.get("foo")
,它將返回bar
。 以同樣的方式,如果我打開另一個redis-cli
實例並輸入get boo
,我too
得到。 只是Python客戶端和Redis客戶端之間的值不同步。 我什至試圖在Python客戶端中設置值之后從bgsave
強制執行,它確實觸發了運行redis-server
的窗口中的保存,但是即使在那之后,這些值也不會反映在redis-cli
窗口中。
直到幾天前,他們的工作情況都非常好,這是最近某個時候開始發生的。
任何想法如何解決這個問題?
在我看來,您正在通過redis-cli
和redis-py
實例中的不同db
訪問(設置/獲取值)。 redis
服務器可以具有彼此完全隔離的多個鍵值存儲(或“表”)。 這些在整個文檔中都稱為db
,並且由整數唯一標識。
如果您要按照代碼片段中的方式實例化redis-py
,請執行以下操作:
import redis
r = redis.StrictRedis()
然后,使用db的構造函數的默認值0 。 ( 請參閱文檔 )
如果值的Python實現之間不同redis-cli
,那么很有可能你的命令行客戶端在不同的運行db
低於0.您可以檢查哪些db
你與命令工作的客戶名單 ,這將返回當前的數據庫ID。
要切換到與Python實現相同的數據庫,只需在您的redis-cli
上運行:
SELECT 0
( 請參閱文檔 )
或者,您也可以使用所需的db
參數調用redis-py
構造函數:
r = redis.StrictRedis(db=3) # 3 is an example value for your redis-cli's working db
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.