REDIS:随机访问列表

REDIS:随机访问列表,redis,ordered-map,Redis,Ordered Map,在Redis中保存一个大列表(例如10K个项目)的最佳方法是什么?我还希望通过键高效地检索项目 Redis似乎没有与Java的OrderedHashMap相当的数据结构,Java的OrderedHashMap实现了这一点,因此可能需要维护一个集合和一个列表,并确保它们保持同步。使用一个排序的集合 添加一些书签;使用得分的当前时间按时间顺序排序: > zadd bookmarks 123 "bk1" > zadd bookmarks 456 "bk2" > zadd bookma

在Redis中保存一个大列表(例如10K个项目)的最佳方法是什么?我还希望通过键高效地检索项目

Redis似乎没有与Java的OrderedHashMap相当的数据结构,Java的OrderedHashMap实现了这一点,因此可能需要维护一个集合和一个列表,并确保它们保持同步。

使用一个排序的集合

添加一些书签;使用
得分的当前时间
按时间顺序排序:

> zadd bookmarks 123 "bk1"
> zadd bookmarks 456 "bk2"
> zadd bookmarks 789 "bk3"
> zadd bookmarks 999 "bk4"
要获取书签,首先需要索引:

> zrank bookmarks "bk3"
> "3"
…然后按索引提取书签:

> zrevrange bookmarks 3 3
> "bk3"
如果不想使用时间戳,可以使用“1”作为分数按字典顺序对书签进行排序:

> zadd bookmarks 1 "link_xyz"
> zadd bookmarks 1 "link_abc"
> zadd bookmarks 1 "link_foo"

> zrange bookmarks 0 -1

1) "link_abc"
2) "link_foo"
3) "link_xyz"
索引查找是
O(log(n))
,添加到
O(log(n)+1)
以通过索引拉取单个成员;对于列表,优于
O(n)

此外,如果您两次添加同一书签,redis会自动替换上一个成员,从而避免重复


希望能有所帮助,

一个类似书签的例子。我想保留一个用户书签列表,但同时检测用户以前是否为给定项目添加了书签。对于常规列表,该检查将是一个O(N)操作。