Hash类型
Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Hash 类型的底层数据结构是由压缩列表或哈希表实现的:
- 如果哈希类型元素小于512个,所有值的大小小于64字节。Redis会采用ziplist结构实现Hash类型。
- 其他情况,会使用哈希表实现Hash类型
常用命令
存储一个哈希表key的键值
- hset 给集合中的 键赋值
获取哈希表key对应的field键值
- hget 从集合取出 value
批量设置hash值和批量获取hash值
- hmset … 批量设置hash的值
- hmget key1 field [field …]
删除hash键
- hdel key field [field …]
- 批量删除 hmdel key field1 field2
其他命令
- hkeys 列出该hash集合的所有field
- hvals 列出该hash集合的所有value
- hincrby 为哈希表 key 中的域 field 的值加上增量 1 -1
- hsetnx 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 .
应用场景
Hash类型适合用来存储对象。比如我们将下面表中的数据存储:
相当于我们要在Redis中存储两个对象
Zset类型
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。
不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。
访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
底层实现
Zset类型的底层数据机构由跳表skiplist实现,跳表保证了链表的有序性。
下面的博客中,详细介绍了跳表的原理和实现:
跳表的原理和实现
常用命令
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
- zadd …
删除元素
- zrem key member [member…]
返回有序集合key中元素member的分值
- zscore key member
返回有序集合key中元素个数
- zcard key
返回有序集 key 中,下标在
之间的元素 ,带WITHSCORES,可以让分数一起和值返回到结果集。
- zrange
[WITHSCORES]
倒序获取有序集合key从start下标到stop下标的元素
- zrevrange key start stop [WITHSCORES]
返回有序集合中指定分数区间内的成员,分数由低到高排序。
- zrangebyscore key min max [withscores] [limit offset count]
- zrevrangebyscore key maxmin [withscores] [limit offset count]
其他命令
- zincrby 为元素的score加上增量
- zrem 删除该集合下,指定值的元素
- zcount 统计该集合,分数区间内的元素个数
- zrank 返回该值在集合中的排名,从0开始。
应用场景
Zset 类型(Sorted Set,有序集合) 可以根据元素的权重来排序,我们可以自己来决定每个元素的权重值。
在面对需要展示最新列表、排行榜等场景时,如果数据更新频繁或者需要分页显示,可以优先考虑使用 Sorted Set。