您需要使用两种结构在 redis 中实现关联数组。一种方法是将密钥按顺序存储在list 中,并将key => value 映射存储在hash 中。
键列表:
[
'2015-11-18',
'2015-11-17',
'2015-11-16'
]
哈希:
{
'2015-11-18' => 'some data',
'2015-11-16' => 'some data',
'2015-11-17' => 'some data'
}
您可以使用scripts 以原子方式更新这两个结构。添加操作脚本可能如下所示:
eval "
redis.call('rpush', KEYS[1], ARGV[1]);
local i = redis.call('llen', KEYS[1]);
return redis.call('hset', KEYS[2], ARGV[1], ARGV[2]);
" 2 'keys' 'values' '2015-11-15' 'some data'
删除操作脚本可能如下所示:
eval "
redis.call('lrem', KEYS[1], ARGV[1]);
return redis.call('hdel', KEYS[2], ARGV[1]);
" 2 'keys' 'values' '2015-11-15'
get-by-key 操作脚本可能看起来像普通的hash get:
hget 'values' '2015-11-15'
按索引获取的操作脚本可能如下所示:
eval "
local k = redis.call('lindex', KEYS[1], ARGV[1]);
return redis.call('hget', KEYS[2], k);
" 2 'keys' 'values' 1
按顺序获取密钥将是一个简单的lrange:
lrange 'keys' 0 -1
要按顺序获取值,您可以使用:
eval "
local k = redis.call('lrange', KEYS[1], 0, -1);
return redis.call('hmget', KEYS[2], unpack(k));
" 2 'keys' 'values'