Redis Hashes的LinkedHashMap行为?

时间:2014-10-16 22:11:10

标签: redis jedis

我想在Redis(Jedis客户端)中使用Hashes数据结构,但也想在Java中维护类似于LinkedHashMap的插入顺序。我对Redis完全不熟悉,并且经历了所有的数据结构和命令,但不知何故无法想到任何直接的解决方案。任何帮助或建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

Redis中的哈希不保持插入顺序。您可以使用Sorted Set和计数器来跟踪订单,从而达到同样的效果。这是一个简单的例子(在Ruby中,对不起):

items = {foo: "bar", yin: "yang", some_key: "some_value"}
items.each do |key, value|
  count = redis.incr :my_hash_counter
  redis.hset :my_hash, key, value
  redis.zadd :my_hash_order, count, key
end

按顺序检索值看起来像这样:

ordered_keys = redis.zrange :my_hash_order, 0, -1
ordered_hash = Hash[
  ordered_keys.map {|key| [key, redis.hget(:my_hash, key)] }
]
# => {"foo"=>"bar", "yin"=>"yang", "some_key"=>"some_value"}

答案 1 :(得分:0)

无需使用任何一个“排序集”计数器。只需使用https://redis.io/commands#list,因为它会保持插入顺序。

HSET my_hash foo bar
RPUSH my_ordered_keys foo

HSET my_hash yin yang
RPUSH my_ordered_keys yin

HSET my_hash some_key some_value
RPUSH my_ordered_keys some_key

LRANGE my_ordered_keys 0 10
1) "foo"
2) "yin"
3) "some_key"