问题标签 [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.
python - redis-py - ConnectionError:远程端关闭套接字 - 过载?
我通过 redis-py 使用 Python 中的 Redis 将 JSON 存储在排序集中。
一切正常,直到我尝试从 Redis 中获取一定数量的数据。
可以正常工作,因为我只要求 20 个条目。
一旦我尝试超过 35 的任何东西,我就会得到:
我已经尝试通过将查询“分块”成 5 个一组来解决这个问题,但似乎我对 Redis 的访问速度非常快,有很多 5 个查询,这仍然会导致异常。
我是否以某种方式 DDOSing redis?
我在 Windows 和 Ubuntu 上都试过了。
上周我实际上一次处理了多达 100 个条目,并且如果我以 10 个为一组进行分块,那么我的 Redis 服务器似乎变得更加敏感。
这是一个重现错误的小脚本。
您会看到,如果您dummy_json
一次保留更少的数据或请求更少的条目,异常就会消失。
redis - redis-python db=0 参数用于?
我已经阅读了 redis-python 文档并在网上搜索,我找不到任何db
关于Redis()
. 它有什么用?
python - 如何使用 python 在 redis 中实现原子 get 或 set&get 键?
我有一个 redis 服务器,我想实现一个原子(或伪原子)方法,它将执行以下操作(注意:我有一个与 redis 服务器有多个会话的系统):
- 如果某个键K存在,则获取它的值
- 否则,使用某个函数F(生成salts)生成的随机值调用SETNX 函数
- 向 redis 询问刚刚由当前会话生成的密钥K的值(或由另一个会话“同时”生成 - 在当前会话生成它之前的片刻)
我不想使用函数F预先生成(在检查值是否存在之前)值,并在键不存在时使用它的原因是:
- 我不想毫无理由地调用F(它可能会导致密集的 CPU 行为(
- 我想避免下一个有问题的情况: 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 伪代码是:
还有其他解决方案吗?
python - redis-py 有 NUMSUB 命令吗?
对于 python 客户端,redis 中是否有一些等效于 NUMSUB 命令?
我查看了文档,除了 publish() 方法本身之外找不到任何东西,它返回该频道上的订阅者数量。不过,事后知道有多少订阅者对我来说并不是很有用。
python - redis.exceptions.ConnectionError:连接到 localhost:6379 时出现错误 -2。名称或服务未知
当我在服务器中运行代码时出现此错误,我的环境是 debian,并且Python2.7.3
当我运行redis-cli
它时它可以正常工作而没有任何错误:
python - Python redis pubsub:发布时类型会发生什么?
发布.py
输出:
子.py
输出:
类型从 datetime.datetime 更改为 str
是否可以保留类型,因为我试图找到我无法将 datetime obj 减去 str 的持续时间?
python - 发生连接错误时 Python Redis 中的 UnicodeDecodeError
我正在编写一些单元测试来测试与 Redis 的连接。在某些时候,我预计连接会失败并且 Python Redis 会引发RedisConnectionError
.
但是会发生什么是底层套接字连接失败并且确实引发了错误(WSACONNECTIONREFUSED),但是文本消息使用了我的语言环境设置:消息是法语的。
这似乎给 Python Redis 带来了麻烦,因为它显然试图向执行这段代码的上层报告该错误:
这会导致 UnicodeDecodeError,如下所示:
确实,可以看到实际的错误消息是:
这对我来说似乎很奇怪,因为我可能不是地球上唯一使用非英语语言环境的 Python Redis 的人。然而,我在互联网上找不到其他人面临同样的问题。
我已经尝试setlocale()
在通话前使用更改语言环境,但消息仍然是法语。
您在那里看到了哪些解决方案?
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 上测试。
我可以做些什么来保持大量通道的低延迟?
Redis 是单线程的,因此增加更多的 cpu 将无济于事。也许更多的内存?如果有,还要多少?
我能做的任何代码或瓶颈都在 Redis 本身?
也许限制来自我的测试代码使用线程编写的方式?
编辑: 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 个连接,比上述测试少,但延迟显着减慢