【Redis】Zset和Hash类型

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类型适合用来存储对象。比如我们将下面表中的数据存储:

image-20221213232746109

相当于我们要在Redis中存储两个对象

image-20221213234141249

Zset类型

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。

不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。

因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。

访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

image-20221213235210726

底层实现

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

影中人lx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值