はRedisのキーがバイナリ文字列があるキー
に応じて特定の順序で、我々は、キーと値のペアを格納する必要があり、いくつかのユースケースなければならないので、私は特定の順序は、あなたが言及したと仮定し、 (つまり、キーはmemcmp
関数と比較されます)。その場合、C++のstd::map
をSORTED SET
と簡単に実装できます。あなたは、2つの段階でこれを達成することができます:SORTED SET
での2つの要素が同じスコアを持っている場合
ビルドのstdは:: Redisのソートセット
で設定し、それらを辞書順に並べられています。だから同じスコアでSORTED SET
内のすべてのメンバーを与える、std::set
を構築するために:
zadd std::set 0 c
zadd std::set 0 a
zadd std::set 0 b
// since all these members have the same score,
// the result is lexicographical ordered:
// a b c
zrange std::set 0 -1
// the following command will fail, since 'c' already exists.
zadd std::set 0 c
のRedis 2.8、あなたはstd::set::lower_bound
に似た何かを構築することができるように、辞書式の範囲で動作するようにit supports some commands、またはので、 std::set::upper_bound
// something similar to lower_bound: find all members not less than b
zrangebylex std::set [b +
// something similar to upper_bound: find all members greater than b
zrangebylex std::set (b +
値
とセットで各キーの地図
すでにstd::set
が得られているので、キーを値とマップするとstd::map
が得られます。
set a value_a
set b value_b
set c value_c
は持って一緒に
あなたはLuaのスクリプトに作品全体を包むことができ、これらの2つの手順を組み合わせるビルトインstd::map
。これを次のように使用してください:
redis-cli --eval map.lua map_name , key value
ありがとうございます。私は 'zadd a value_a'と考えています。ここでは' a'がキーで、 'value_a'は値です。しかし、実際には 'a'はソートされた集合の名前であり、' value_a'はその要素です。 'std :: map'のような場合、構文は' zadd std :: map key value'となります。 –
Redisにはそのようなデータ構造はないので、私が答えで述べたように、2つのステップを実装する必要があります。これらのステップをluaスクリプトでラップすると、*組み込み* 'std :: map':' redis-cli --eval map.lua std :: map、key value'を得ることができます。 –