0

キーでアイテムを効率的に取得したい Redis で大きなリスト (10K アイテムなど) を保持する最良の方法は何ですか。

Redis には、これを実現する Java の OrderedHashMap に相当するデータ構造がないようです。そのため、セットとリストを維持し、それらが同期していることを確認する必要があるかもしれません。

4

1 に答える 1

1

ソート済みセットを使用します。

ブックマークを追加します。現在の時刻を使用しscoreて時系列に並べ替えます。

> 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)ています。

また、同じブックマークを 2 回追加すると、redis は以前のメンバーを自動的に置き換えるため、重複を回避できます。

それが役に立てば幸い、

于 2013-10-19T18:25:19.477 に答える