技术分享——梳理下Redis五种数据类型和使用场景(1)

本文介绍了Redis的Hash、Set和Zset数据类型,包括它们的内部实现、特点和使用场景,以及Java开发者提升技能的重要性,特别提到了Mybatis源码解析和知识积累对于职业发展的影响。
摘要由CSDN通过智能技术生成

Hash数据类型


redis的hash相当于hashmap,内部实现上和hashmap一致,数组+链表的数据结构。

image.png

redis的hash数据类型只能是字符串。它们 rehash 的方式不一样,因为 Java 的 HashMap 在字典很大时,rehash 是个耗时的操作,需要一次性全部 rehash。Redis 为了高性能,不能堵塞服务,所以采用了渐进式 rehash 策略。渐进式 rehash 会在 rehash 的同时,保留新旧两个 hash 结构,查询时会同时查询两个 hash 结构,然后在后续的定时任务中以及 hash 操作指令中,循序渐进地将旧 hash 的内容一点点迁移到新的 hash 结构中。当搬迁完成了,就会使用新的hash结构取而代之。 当 hash 移除了最后一个元素之后,该数据结构自动被删除,内存被回收。

常用使用场景

(1)保存结构体信息

hash字典类型也是比较适合保存结构体信息的,不同于字符串一次序列化整个对象,hash可以对用户结构中的每个字段单独存储。这样当我们需要获取结构体信息时可以进行部分获取,而不用序列化所有字段,而将整个字符串保存的结构体信息只能一次性全部读取。

基本操作:

127.0.0.1:6379> hset user.10002 name monkey

(integer) 1

127.0.0.1:6379> hget user.10002 name

“monkey”

127.0.0.1:6379> hgetall user.10002

  1. “id”

  2. “10002”

  3. “name”

  4. “monkey”

Set集合类型


redis的set相当于java中的HashSet,内部的健值是无序唯一的,相当于一个hashmap,但是value都是null。set数据类型其实没什么好讲的,使用场景也是比较单一的,就是用在一些去重的场景里,例如每个用户只能参与一次活动、一个用户只能中奖一次等等去重场景。

基本操作

127.0.0.1:6379> sadd userset 10001

(integer) 1

127.0.0.1:6379> sadd userset 10002

(integer) 1

127.0.0.1:6379> sadd userset 10001

(integer) 0

127.0.0.1:6379> sadd userset 10003 10004

(integer) 2

127.0.0.1:6379> smembers userset

  1. “10001”

  2. “10002”

  3. “10003”

  4. “10004”

Zset有序集合


它类似于 Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权重。zset内部是通过跳跃列表这种数据结构来实现的。因为zset要支持随机的插入和删除,所以不能使用数组结构,而需要改成普通链表数据结构。zset需要根据score进行排序,所以每次插入或者删除值都需要进行先在链表上查找定位。

常用使用场景

(1)各类热门排序场景

例如热门歌曲榜单列表,value值是歌曲ID,score是播放次数,这样就可以对歌曲列表按播放次数进行排序。

当然还有类似微博粉丝列表、评论列表等等,可以将value定义为用户ID、评论ID,score定义为关注时间、评论点赞次数等等。

基本操作:

这里的例子就是对用户的评分进行排序。

127.0.0.1:6379> zadd userzset 100 10002

(integer) 1

127.0.0.1:6379> zadd userzset 98 10001

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

Mybatis源码解析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

Mybatis源码解析

[外链图片转存中…(img-OO2k2bZ2-1710423219544)]

[外链图片转存中…(img-NNppzLXq-1710423219544)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值