0

我已经安装redis在我的 OS X 上,并尝试从 Python 3.5 客户端在 Redis 中设置和获取一些值。我有 Redis 服务器(通过 command redis-server)和 redis-client (通过 command 打开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中调用会按预期返回,但是,如果我在我的 Python 客户端中运行,我会得到.get bootoor.get(boo)None

有趣的是,它们在自己的实例之间同步。因此,如果我打开另一个 Python 命令提示符并键入r.get("foo"),它会返回bar. 同样,如果我打开另一个redis-cli实例并键入get boo,我会得到too. 只是 Python 客户端和 Redis 客户端之间的值没有同步。我什至尝试在bgsave此处设置值后从 Python 客户端强制执行,它确实在redis-server正在运行的窗口中触发了保存,但即使在那之后这些值也不会反映在redis-cli窗口中。

他们一直工作得很好,直到几天前,这已经开始发生在最近的某个时候。

知道如何解决这个问题吗?

4

1 回答 1

0

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

如果您的实例redis-py与代码片段中的完全相同,请使用:

import redis
r = redis.StrictRedis()

然后,您将使用构造函数的默认值 db,即0。(见文档

如果 Python 实现 和 之间的值不同redis-cli,那么很可能您的命令行客户端运行的db不是 0。您可以使用命令CLIENT LISTdb检查您正在处理哪个,这将返回您当前的数据库 ID。

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

SELECT 0

见文档

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

r = redis.StrictRedis(db=3) # 3 is an example value for your redis-cli's working db
于 2018-11-21T16:45:32.380 回答