问题标签 [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 投票
1 回答
1321 浏览

python - redis-py - ConnectionError:远程端关闭套接字 - 过载?

我通过 redis-py 使用 Python 中的 Redis 将 JSON 存储在排序集中。

一切正常,直到我尝试从 Redis 中获取一定数量的数据。


可以正常工作,因为我只要求 20 个条目。

一旦我尝试超过 35 的任何东西,我就会得到:

我已经尝试通过将查询“分块”成 5 个一组来解决这个问题,但似乎我对 Redis 的访问速度非常快,有很多 5 个查询,这仍然会导致异常。

我是否以某种方式 DDOSing redis?


我在 Windows 和 Ubuntu 上都试过了。

上周我实际上一次处理了多达 100 个条目,并且如果我以 10 个为一组进行分块,那么我的 Redis 服务器似乎变得更加敏感。


这是一个重现错误的小脚本。

您会看到,如果您dummy_json一次保留更少的数据或请求更少的条目,异常就会消失。

0 投票
2 回答
9252 浏览

redis - redis-python db=0 参数用于?

我已经阅读了 redis-python 文档并在网上搜索,我找不到任何db关于Redis(). 它有什么用?

0 投票
1 回答
3779 浏览

python - 如何使用 python 在 redis 中实现原子 get 或 set&get 键?

我有一个 redis 服务器,我想实现一个原子(或伪原子)方法,它将执行以下操作(注意:我有一个与 redis 服务器有多个会话的系统):

  1. 如果某个键K存在,则获取它的值
  2. 否则,使用某个函数F(生成salts)生成的随机值调用SETNX 函数
  3. 向 redis 询问刚刚由当前会话生成的密钥K的值(或由另一个会话“同时”生成 - 在当前会话生成它之前的片刻)

我不想使用函数F预先生成(在检查值是否存在之前)值,并在键不存在时使用它的原因是:

  1. 我不想毫无理由地调用F(它可能会导致密集的 CPU 行为(
  2. 我想避免下一个有问题的情况: T1:会话 1 生成随机值VAL1 T2:会话 1 询问密钥K是否存在并得到“假” T3:会话 2 生成随机值VAL2 T4:会话 2 询问密钥K是否存在并得到“假” T5:会话 2使用值VAL2调用SETNX并从现在开始使用VAL2 T6:会话 1使用值VAL1调用SETNX并从现在开始使用VAL1,其中键K的实际值为VAL2

我创建的 python 伪代码是:

还有其他解决方案吗?

0 投票
2 回答
1062 浏览

python - redis-py 有 NUMSUB 命令吗?

对于 python 客户端,redis 中是否有一些等效于 NUMSUB 命令?

我查看了文档,除了 publish() 方法本身之外找不到任何东西,它返回该频道上的订阅者数量。不过,事后知道有多少订阅者对我来说并不是很有用。

0 投票
2 回答
20364 浏览

python - redis.exceptions.ConnectionError:连接到 localhost:6379 时出现错误 -2。名称或服务未知

当我在服务器中运行代码时出现此错误,我的环境是 debian,并且Python2.7.3

当我运行redis-cli它时它可以正常工作而没有任何错误:

0 投票
1 回答
7509 浏览

python - Redis打开文件太多错误

当一定数量的用户超过(大约 1200 个并发用户)时,我收到“打开文件过多错误”。

我使用它增加了限制,但我得到了同样的错误。

然后我跟着这个,没有改变得到同样的错误。

为了创建连接,我在 django 设置中使用并REDIS在需要时使用。

为什么我这样做是因为它在 redis 邮件列表中被建议如下:

一个。创建一个全局 redis 客户端实例并让您的代码使用它。

这种方法适合连接池吗?或者我如何避免打开文件过多的错误?在 Django 响应中,我得到了

连接错误(由:[Errno 24] 打开的文件过多)",),)'

谢谢。

0 投票
1 回答
2132 浏览

python - 锁定不适用于 redis-py - 未知命令“EVALSHA”

以下是在 redis 中创建、获取和释放锁:

怎么会acquire()抛出以下错误?

我的设置:python 2.7.8,redis 2.4.5 64bit,win8

0 投票
1 回答
980 浏览

python - Python redis pubsub:发布时类型会发生什么?

发布.py

输出:

子.py

输出:

类型从 datetime.datetime 更改为 str
是否可以保留类型,因为我试图找到我无法将 datetime obj 减去 str 的持续时间?

0 投票
1 回答
900 浏览

python - 发生连接错误时 Python Redis 中的 UnicodeDecodeError

我正在编写一些单元测试来测试与 Redis 的连接。在某些时候,我预计连接会失败并且 Python Redis 会引发RedisConnectionError.

但是会发生什么是底层套接字连接失败并且确实引发了错误(WSACONNECTIONREFUSED),但是文本消息使用了我的语言环境设置:消息是法语的。

这似乎给 Python Redis 带来了麻烦,因为它显然试图向执行这段代码的上层报告该错误:

这会导致 UnicodeDecodeError,如下所示:

确实,可以看到实际的错误消息是:

这对我来说似乎很奇怪,因为我可能不是地球上唯一使用非英语语言环境的 Python Redis 的人。然而,我在互联网上找不到其他人面临同样的问题。

我已经尝试setlocale()在通话前使用更改语言环境,但消息仍然是法语。

您在那里看到了哪些解决方案?

0 投票
0 回答
1522 浏览

python - Redis:降低延迟的通道数。如何防止退化?

发布.py

子.py

我正在测试 redis pubsub 以替换使用 rsh 与远程框进行通信。
我测试过的一件事是影响发布和 pubsub.listen() 延迟的通道数量。

测试:每个频道一个发布者和一个订阅者(发布者每隔一秒发布一次)。增加通道数量并观察延迟(从发布者发布消息到订阅者通过监听获得消息的时间)

陈数--------------以秒为单位的平均延迟
10:---------------------------- -------0.004453
50:----------------------------------0.005246
100:--- ------------------------------0.0155
200:------ ----------------0.0221
300:-------------------------------------------- --0.0621

注意:在 2 CPU + 4GB RAM + 1 NICs RHEL6.4 VM 上测试。

  1. 我可以做些什么来保持大量通道的低延迟?

  2. Redis 是单线程的,因此增加更多的 cpu 将无济于事。也许更多的内存?如果有,还要多少?

  3. 我能做的任何代码或瓶颈都在 Redis 本身?

  4. 也许限制来自我的测试代码使用线程编写的方式?

编辑: Redis Cluster vs ZeroMQ in Pub/Sub,用于水平扩展的分布式系统

接受的答案是“我猜你想最小化延迟。通道的数量是无关紧要的。关键因素是发布者的数量和订阅者的数量、消息大小、每个发布者每秒的消息数量、每个发布者接收到的消息数量"

根据我的测试,我不知道这是不是真的。(声称通道数量无关紧要)
例如,我做了一个测试。

1) 一个通道。100 个发布者发布到一个有 1 个订阅者收听的频道。Publisher 一次发布一秒钟。延迟为0.00965
2) 除 1000 个发布者外,相同的测试。延迟为0.00808

现在在我的频道测试期间:
300 个频道和 1 个 pub - 1 个 sub 导致0.0621,这只有 600 个连接,比上述测试少,但延迟显着减慢