首页 > 解决方案 > 雷迪斯。是否可以创建插入排序的列表集?

问题描述

是否可以在 redis 中创建插入排序的列表集?

例子:

填写数据:

push("listname", "x")
push("listname", "y")
push("listname", "x")

期望的结果:

get_list("listname") => ["x", "y"]

我们需要在分布式系统中进行,因此有序集(ZADD)不适用,因为我们不能保证得分顺序。

标签: redis

解决方案


结合 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"

推荐阅读