Redis 哈希的 LinkedHashMap 行为?

Ash*_*shu 5 redis jedis

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

Car*_*auf 0

Redis 中的哈希不维护插入顺序。您可以通过使用有序集和计数器来跟踪顺序来实现相同的效果。这是一个简单的例子(抱歉,用 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
Run Code Online (Sandbox Code Playgroud)

按顺序检索值将如下所示:

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"}
Run Code Online (Sandbox Code Playgroud)