问题标签 [redis-py]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1724 浏览

python-2.7 - redis:匹配哈希的部分键

在哈希中,我有一堆键值对

我的密钥采用以下格式: name:city

我使用 python 访问 redis,在https://redis-py.readthedocs.org/en/latest/中,我没有看到任何进行部分匹配的哈希操作

我希望能够使用城市名称获取哈希中的所有键

那可能吗?

0 投票
0 回答
261 浏览

python - 在 Redis 中批量写入

我必须在python中将数百万行mysql数据库插入redis。我目前正在使用 pipline,但它占用了太多时间和内存。你能建议更好的方法来实现这一点。

0 投票
1 回答
889 浏览

python - 在python中,使用带有多处理模块的redis-py,为什么每个进程都是不同的fd?

在python中,使用带有多处理模块的redis-py,为什么每个进程都是不同的fd?

测试代码:

测试结果:

为什么每个进程的redis conn fd不一样?在我的认知中,只有在惰性模式下创建redis connect,才会出现不同的redis fd。

并且,所有子进程都是共享 r 对象(redis conect fd)。

0 投票
1 回答
957 浏览

python - Python无检查(redis)

我正在使用 redis-py 编写一个模块,这里有一个问题:

我检查了 None 值,但它不起作用我从不进入 else 循环,即使结果是 None。输出 :

我可能错过了一些东西,但我不知道是什么。

0 投票
1 回答
1368 浏览

python - 使用 Redis 实现持久堆栈数据结构

我正在使用 redis-py 和 Redis 列表数据类型实现堆栈数据结构。当对应的列表数据类型为空时,我不清楚如何处理。默认 Redis 行为似乎是,一旦列表为空,相关键就会被删除。例如,当我在 Python 端弹出或清除堆栈数据结构中的所有元素时,会在 Redis 上命中空列表案例。基本上,我的设置是我的代码中有堆栈对象,它调用 Redis 列表上的操作。例如,当堆栈对象的客户端执行 stack.pop() 时,堆栈对象然后使用 redis-py 在 Redis 中的相应列表上调用 BRPOP。另外,在我的设置中,stack 对象具有 key 属性,它是 Redis 中相关列表的键。

到目前为止,我已经考虑了两种可能的解决方案:

  1. 永远不要完全清空 Redis 列表。至少维护列表中的一个元素。从客户端的角度来看,如果 Redis 列表仅包含 1 个元素,则堆栈为空。这种方法有效,但我主要不喜欢它,因为它涉及跟踪推送/弹出的元素数量。

  2. 如果列表为空,则删除相关键。在后续推送时,只需在 Redis 上创建一个新列表。这种方法也有效,但这里增加的复杂性是我无法确定其他人是否使用与我的堆栈对象相同的键在 Redis 上创建了 k,v 对。

所以,我基本上是在寻找一种方法来保留一个带有空列表的键,它不涉及上述两种方法所需的簿记。谢谢。

0 投票
0 回答
85 浏览

python - 为什么我的 Redis Python 设置在调用一次命令时会多次插入值?

我正在尝试 Redis,但我不确定我的设置哪里出了问题

r.lpush()被调用时,我假设它会在我的列表中插入一个值并将列表加长,但是当llen()被调用时,每次运行此脚本时长度都会随机增加

每次我运行脚本时,列表的长度都会增加任意数量

编辑:所以在检查了之前的长度和之后的长度之后,它增加了一,但这是多次运行脚本后的输出

之前:1 之后:2

之前:5 之后:6

之前:16 之后:17

不确定是什么导致每次跑步后跳跃

编辑:redis MONITOR 命令的输出

这是上述脚本仅运行一次后的输出。该rpush("lst1", 6)命令反复运行了很多次,我认为这与我的 Docker 配置有关

我的 Docker 配置是:

Redis Docker 文件:

我试过有restart:always和没有它的redis

Redis 监视器输出:

0 投票
1 回答
8098 浏览

python - 获取 Redis 通配符键

我正在使用redis开发一个python项目,经过一些研究,我没有找到任何解释如何在包含通配符'*'的字符串上创建get()的东西。

所以我有几个键:

我想获取 example.first 和 example.second 的键/值:

有没有办法做到这一点?

0 投票
0 回答
311 浏览

python - socket_timeout 覆盖 StrictRedis 中的 BRPOP 超时参数

我遇到了一个问题,即带有 socket_timeout 参数的重用 StrictRedis 连接覆盖了具有无限超时的 brpop 命令。有任何想法吗?

0 投票
0 回答
24 浏览

redis - 使用 NULL 和 ETX 序列的键() redis python 模块中的意外行为

我正在将 redis 与 python 模块一起使用来保存字节序列(作为键)当我试图获取键时包含:“\x00??\x03”(?=任何ASCII字符)

例如:

str = "\x00\x01\x00\x03" (作为字节序列)

db.keys(模式=' '+str+' ')

给我所有的钥匙。

这是正常行为吗?

0 投票
1 回答
2298 浏览

python - 芹菜运行大约一天后的 redis.exceptions.ConnectionError

这是我的完整跟踪:

我真的搜索了 ConnectionError 但我的没有匹配问题。

我的平台是 ubuntu 14.04。这是我的 redis 配置的一部分。(如果您需要整个 redis.conf 文件,我可以分享。顺便说一下,所有参数都在 LIMITS 部分关闭。)

这是我的迷你 redis 包装器:

这就是我使用它的方式:

软件包版本:

所以问题是;在启动 celery workers 一段时间后会发生此连接错误。在第一次出现该错误之后,所有任务都以该错误结束,直到我重新启动所有芹菜工人。(有趣的是,芹菜花在那个问题时期也失败了)

我怀疑我的 redis 连接池使用方法,或者 redis 配置或者不太可能的网络问题。关于原因的任何想法?我究竟做错了什么?

(PS:今天看到这个错误时,我会添加redis-cli info结果)

更新:

我通过在我的 worker starter 命令中添加--maxtasksperchild参数暂时解决了这个问题。我设置为200。当然这不是解决这个问题的正确方法,它只是对症治疗。它基本上会定期刷新工作实例(关闭旧进程并在旧进程达到 200 个任务时创建新进程)并刷新我的全局 redis 池和连接。所以我认为我应该专注于全球redis连接池的使用方式,我还在等待新的想法和评论。

对不起我的英语不好,提前谢谢。