从Python设置的Redis值未反映在Redis客户端中

时间:2018-11-21 16:09:27

标签: python python-3.x redis redis-server

我已经在OS X上安装了redis,并尝试从Python 3.5客户端设置和获取Redis中的一些值。我的Redis服务器已打开(通过命令redis-server),redis客户端也已打开(通过命令redis-cli打开)。这是我在Python上尝试的方法:

import redis
r = redis.StrictRedis()
r.set("foo", "bar")
r.get("foo")

这将按预期打印bar。但是,如果我转到redis-client提示符并尝试get foo,它将返回nil。以同样的方式,如果我在redis客户端本身中设置了一个值,例如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的窗口中的保存,但这些值未反映在{{1}中}窗口。

直到几天前,他们的工作状况都非常好,这已经在最近的某个时候开始发生了。

有什么解决方法吗?

1 个答案:

答案 0 :(得分:0)

在我看来,您正在dbredis-cli实例中通过不同的redis-py访问(设置/获取值)。 redis服务器可以具有彼此完全隔离的多个键值存储(或“表”)。这些在整个文档中均称为db,并由整数唯一标识。

如果您要完全按照代码段的方式实例化redis-py,请使用:

import redis
r = redis.StrictRedis()

然后,您正在使用db的构造函数默认值,即 0 。 (See documentation

如果Python实现和redis-cli之间的值不同,则很可能您的命令行客户端运行的db不同于0。您可以检查工作的db并使用命令CLIENT LIST,它将返回您当前的数据库ID。

要切换到与Python实现相同的数据库,只需在您的redis-cli上运行:

SELECT 0

See documentation

或者,您也可以使用所需的redis-py参数调用db构造函数:

r = redis.StrictRedis(db=3) # 3 is an example value for your redis-cli's working db