问题标签 [py-redis]
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 hash - 如何保存声音文件?
有人能告诉我如何在redis中保存文件吗?我希望能够做类似的事情:
举个例子。
我正在使用python,因此需要使用python打开mp3文件,将其保存为我猜的字节数组(?),然后将该字节数组保存到redis中。
我知道我可以在 python 中打开这样的文件:
但是,如果我以某种方式在 REDIS 中保存“内容”,当我稍后检索它以实际播放它或通过 REST 方法将其传回时,还有什么需要做的吗?我需要做什么才能让 python 将其“识别”为声音文件而不仅仅是字符串?
我以前从未尝试过这样的事情,所以任何指针或陷阱将不胜感激。
编辑 1
到目前为止,这是我一直在玩的代码:
通过日志,我可以看到文件的内容正在被读入我的变量中。当我尝试转身并写入数据库时,我没有收到任何错误,但我的 SET 中“greeting”键的值的内容是空的。注意下面的redis输出:
编辑 2
我发现了为什么它没有将内容保存到数据库中。我的 hmset 命令有语法问题。现在代码如下所示:
python-3.x - redis - 如何创建事务
背景
我需要一种在 REDIS 中创建事务的方法,如果一个命令失败,我需要整个事务失败/回滚。
我之前尝试过询问一次(如果其中一个命令不起作用,REDIS-pipeline 不会失败)
但也许我没有问清楚,或者我的问题的措辞中丢失了一些东西。或者我没看懂答案。但无论如何,我一直在做更多的研究,似乎 REDIS 确实通过 MULTI 和 EXEC 命令进行了事务。在我的例子中,由于我使用的是 pyredis,我可以创建一个将参数“transaction”设置为 True 的管道。
代码
为了更好地理解事务和管道的工作原理,我编写了代码来“模拟”失败,以证明我的事务中的命令正在回滚。所以这就是我的烧瓶应用程序中的内容:
当我传入 0 作为触发器时,它不会“失败”,因此系统会创建两个哈希值。当我设置触发器时,它似乎表现正确,因为我在数据库中没有任何哈希值。
问题
这是一个很好的测试吗?已经证明交易有效?如果没有,你能建议一个更好的测试吗?
在我的真实代码中,我计划检查 retval 的内容(顺便说一下,它看起来像这样: [0,0] 如果什么都没做,或者 [1, 1] 如果我确实添加/删除了一些东西.) 如果我期待一个 [1,1] 并且我得到不同的东西,我将假设事务失败并且让该方法只返回一个 false。有一个更好的方法吗?
提前感谢您的时间和投入。
redis - Redis对订阅频道数量的限制?
我正在使用 python redis 包与我的 Mac 上的 redis 交互。我通过不带参数运行 redis-server 在另一个窗口中启动 redis。然后我尝试使用 redis pubsub 对象订阅大约 80 个频道。我收到编号从 1 到 63 的连接消息,但之后我不断收到连接消息 63。列出订阅的频道显示它只能订阅 63 个频道。为什么是这样?是否可以更改配置设置以允许我订阅超过 63 个频道?我该如何解决?
python-3.x - 使用带有 RDBMS 表的 Redis 实现缓存
我的问题:
我需要实现一个缓存,将 RDBMS(我正在使用 Microsoft SQL Server)表存储到缓存服务器的内存中。
RDBMS 表提供了什么:
它允许我查询具有任何列的表并单独返回过滤后的记录。
我尝试了什么:
我实现了一个 Redis 缓存服务器(使用 Python 编程语言)并存储了 RDBMS 表的数据,如下所示:
我的问题:
实现 Redis(或)任何其他键/值存储以使用它缓存 RDBMS 和查询是一个最佳主意吗?
我主要关心的是,我需要查询数据并从缓存服务器返回结果(在键/值存储中查询数据变得复杂)
请建议执行键/值对是否可行。这是一般性的讨论。
我主要关心的是:
我需要使用 WHERE、GROUP BY、ORDER BY、JOINS、AGGREGATE FUNCTIONS 查询数据,我希望其中一些在 Redis 中找不到。
请建议我有任何其他 ORM 用于(Redis 缓存)/任何其他缓存技术来存储和检索 RDBMS 表记录。
我尝试使用 SQLite DB 作为缓存,它可以工作。但是,我正在寻找更优化的缓存技术来更快地检索记录。
所需的缓存大小为: 50 GB(包含所有表)。
在这种情况下,请建议 SQLite 是否适用于我的场景或我们可以采用的任何其他缓存技术。
redis - 计算 Redis 中的飞行消息
我使用 Redis 作为一个简单的 pubsub 代理,由 redis-py 库管理,只使用默认的“主”通道。在 Redis 本身或包装 Python 库中是否有一种技术来计算此队列中的消息数量?我对 Redis 没有更深入的概念知识(特别是它如何实现代理功能),所以不确定这样的问题是否有意义
不需要精确计数、避免锁定等;我只需要定期(以分钟为单位)检查此队列是否为空
python - 如何使用 pyarrow 将 Pandas 数据帧设置/获取到 Redis
使用
在 Pandas 0.25 之前,这在下面有效。
现在,有已弃用的警告..
pyarrow 是如何工作的?而且,我如何让 pyarrow 对象进出 Redis。
python-3.x - redis-py 在退出时不关闭线程
我正在使用 redis-py 2.10.6 和 redis 4.0.11。
我的应用程序将 redis 用于 db 和 pubsub。当我关闭时,我经常会挂起或崩溃。后者通常抱怨在处理 pubsub 回调时发生的文件描述符错误或文件上的 I/O 错误(我不使用任何错误),所以我猜测根本问题是相同的:不知何故我没有t 正确断开连接,并且我的 redis.Redis 对象使用的池还活着并且正在启动。
前一种错误的输出示例(在 _read_from_socket 期间):
redis.exceptions.ConnectionError:从套接字读取时出错:(9,'Bad file descriptor')
其他时候,stacktrace 清楚地显示 redis/connection.py -> redis/client.py -> threading.py,这证明 redis 没有杀死它使用的线程。
当我为我运行的应用程序加注星标时:
当我想退出应用程序时,我在main中执行的最后一条指令是使用类调用我的 redis 中的函数,其实现是:
我的理解是,理论上我什至不需要做任何这些“关闭”电话,但是,无论有没有它们,我仍然不能保证完全关闭。
我的问题是,我应该如何保证彻底关机?
mpi - 使用 mpirun 指定哪些进程实现 RQ worker
我正在使用RQ在集群上实现作业队列,其中作业是使用 Python 管理和运行的。RQ 工作人员通过 启动mpirun,然后是一个将作业添加到队列的 Python 程序。
我注意到当我只有一个进程时,所以唯一的 RQ 工作人员与程序在同一个进程上,会有很大的延迟。这可能是因为我有大量关于redis-server他们共享访问的数据。
在具有单个作业的测试用例中,使用 2 个进程总体上会加快速度。因此,我认为最好有一个程序(主)进程,它只是将作业放在工作人员的队列中。
目前我有
我的主要问题是:如何修改mpirun命令以在第 2-N 个进程上启动 RQ 工作人员,确保master_program唯一使用第一个?
第二个问题:为什么当 RQ worker 与主程序共享进程时,它会慢得多?在等待 RQ worker 的结果时,master 没有做任何其他事情。
redis - Redis TimeSeries 是在股票价格中捕捉烛台的正确工具吗
我目前正在尝试为股票价格烛台做一个简单的实现。假设我们有一只名为 XYZ 的股票。该股票接收价格流(没有特定频率),(例如)看起来像:XYZ:[10.2, 10.7, 12, 11 ....]。
目标是记录每分钟的一些指标,以反映该股票的状态。烛台具有收盘价(一分钟内的最后已知价格)、高价(一分钟内的最高价格)等指标。
我认为可以实现这一点的一种方法是使用Redis TimeSeries。我考虑了这个解决方案,因为我可以在价格流上创建规则,并且每 60 秒它会将一些聚合(如:max、min、first..等)刷新到目标存储桶。
我当前使用 Redis TimeSeries(在Python中)对每个股票价格的蜡烛条的实现看起来像这样(再次使用股票 XYZ 作为示例)并且为简单起见没有标签:
我的问题是:
- 有没有办法在一个规则中发送多个聚合(如 max、last...等),而不是为每只股票创建多个源和目标存储桶?
- Redis TimeSeries 是否适合此任务?或者使用其他解决方案(例如 Redis 流)会更容易吗?
redis - Redis 键空间通知仅检测新创建的键而不是替换
我试图在创建新密钥时在 redis 中收到通知,而在更新/替换密钥时不收到通知。有没有办法以这种方式设置通知,或者是否有任何其他方式可以在仅创建新密钥而不替换现有密钥时得到通知?我正在使用 hset 来设置密钥。