redis - 为什么 Redis 没有 LINCR?

标签 redis

我想知道为什么Redis没有命令来增加列表中的元素?

您可以使用 INCR 增加键的值,可以使用 HINCRBY 增加哈希集中的项目,还可以使用 ZINCRBY 增加排序集中的元素。但不在列表中。

这让我很困惑。为什么不呢?

这个决定背后的想法是什么?列表“不应该这样使用”,那为什么呢?他们的工作方式与布景非常不同?那么最大的区别是什么?

最佳答案

最大的区别是不可能在 Redis 列表中有效地访问给定的项目。它们被实现为双链表(对于大列表)或完全序列化(ziplist 优化,对于小列表)。相比之下,散列和排序集是使用散列表实现的,散列表允许项目访问的摊销复杂度为 O(1)。

因此,如果列表存在这样的增量命令,则其复杂度将为 O(n)。只是增量并不是很有趣。

请注意,如果您需要此类功能,您可以通过调用LINDEX和LSET,使用服务器端Lua脚本轻松地自行实现。

关于redis - 为什么 Redis 没有 LINCR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26330686/

相关文章:

用于发送到 Sidekiq/Redis 的 Ruby ZIP 文件编码

javascript - 发布/订阅可靠消息 : Redis VS RabbitMQ

Redis.windows.conf 与 Redis.windows-service.conf

node.js - 无法在Windows机器上制作redis

docker - 使用 docker-compose 和不同的配置文件 : error - Can't chdir to '/var/lib/redis' : No such file or directory 启动 Redis

java - 单元测试具有外部依赖性的 apache beam 有状态管道

django - 连接 django-rq 时出错 : ImportError: cannot import name get_failed_queue

mysql - 缓存流数据的最后条目

redis - 如何从redis位图中获取二进制字符串?

lua - 使用 Lua 脚本读取 lrange 结果的第一个字节