簡體   English   中英

從Python設置的Redis值未反映在Redis客戶端中

[英]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-cliredis-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM