redis - 雷迪斯。是否可以创建插入排序的列表集?
问题描述
是否可以在 redis 中创建插入排序的列表集?
例子:
填写数据:
push("listname", "x")
push("listname", "y")
push("listname", "x")
期望的结果:
get_list("listname") => ["x", "y"]
我们需要在分布式系统中进行,因此有序集(ZADD)不适用,因为我们不能保证得分顺序。
解决方案
结合 LUA 脚本使用 SET 和 LIST 数据结构怎么样?
EVAL "if redis.call('SADD', KEYS[2], ARGV[1]) == 1 then return redis.call('RPUSH', KEYS[1], ARGV[1]) else return 0 end" 2 listname setname value
例子:
> EVAL "if redis.call('SADD', KEYS[2], ARGV[1]) == 1 then return redis.call('RPUSH', KEYS[1], ARGV[1]) else return 0 end" 2 list set x
(integer) 1
> EVAL "if redis.call('SADD', KEYS[2], ARGV[1]) == 1 then return redis.call('RPUSH', KEYS[1], ARGV[1]) else return 0 end" 2 list set y
(integer) 2
> EVAL "if redis.call('SADD', KEYS[2], ARGV[1]) == 1 then return redis.call('RPUSH', KEYS[1], ARGV[1]) else return 0 end" 2 list set x
(integer) 0
> LRANGE list 0 -1
1) "x"
2) "y"
推荐阅读
- java - docker 容器中的 Java 进程在 docker stop 后始终以状态 137 结束
- ios - 从 magento 2.0 REST Api 获取多个产品图像以用于购物车列表 - Swift 4
- javascript - 如果两个布尔值为真但也可以为空或不存在,则返回真
- java - ColumnHideCommand makes the table columns to disappear in NatTable, when all table elements are selected
- dart - 屏幕外列表图块处理
- android - 如何在管道中缓存库?
- android - 保存后不显示个人资料图像(它只显示空白屏幕)
- .net - 发生意外关闭时,有什么方法可以防止 service.exe 损坏
- ionic-framework - Ionic 3 启动项目耗时太长
- python - 无法导入 os.listdir