一定有一些用例,我们必须根据键以特定顺序存储键值对
由于 Redis 键是二进制字符串,我假设您提到的特定顺序是字典顺序(具体来说,键与memcmp
功能)。在这种情况下,您可以轻松地实现 C++ 的std::map
with SORTED SET
。您可以通过 2 个步骤实现此目的:
使用 Redis 的有序集构建 std::set
如果a中有2个元素SORTED SET
如果分数相同,则按字典顺序排列。所以为了建立一个std::set
,只需给所有成员一个SORTED 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 开始,它支持一些命令 http://redis.io/topics/data-types-intro#lexicographical-scores对字典范围进行操作,这样你就可以构建类似的东西std::set::lower_bound
, or 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
将这 2 个步骤结合在一起
您可以将整个工作包装到 lua 脚本中以得到built-in std::map
。并像这样使用它:
redis-cli --eval map.lua map_name , key value