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