Java@还不懂Redis是什么?一文带你深入Redis基本结构,准备向开发进军( 二 )
【Java@还不懂Redis是什么?一文带你深入Redis基本结构,准备向开发进军】当列表弹出了最后一个元素之后 , 该数据结构自动被删除 , 内存被回收 。
Redis 的列表结构常用来做异步队列使用 。 将需要延后处理的任务结构体序列化成字符 串塞进 Redis 的列表 , 另一个线程从这个列表中轮询数据进行处理 。
三、hash (哈希字典)
Redis 的字典相当于 Java 语言里面的 HashMap , 它是无序字典 。 内部实现结构上同 Java 的 HashMap 也是一致的 , 同样的数组 + 链表二维结构 。 第一维 hash 的数组位置碰撞 时 , 就会将碰撞的元素使用链表串接起来 。
不同的是 , Redis 的字典的值只能是字符串 , 另外它们 rehash 的方式不一样 , 因为Java 的 HashMap 在字典很大时 , rehash 是个耗时的操作 , 需要一次性全部 rehash 。 Redis 为了高性能 , 不能堵塞服务 , 所以采用了渐进式 rehash 策略 。
渐进式 rehash 会在 rehash 的同时 , 保留新旧两个 hash 结构 , 查询时会同时查询两个 hash 结构 , 然后在后续的定时任务中以及 hash 的子指令中 , 循序渐进地将旧 hash 的内容 一点点迁移到新的 hash 结构中 。
当 hash 移除了最后一个元素之后 , 该数据结构自动被删除 , 内存被回收 。
hash 结构也可以用来存储用户信息 , 不同于字符串一次性需要全部序列化整个对象 , hash 可以对用户结构中的每个字段单独存储 。 这样当我们需要获取用户信息时可以进行部分 获取 。 而以整个字符串的形式去保存用户信息的话就只能一次性全部读取 , 这样就会比较浪 费网络流量 。
hash也有缺点 , hash 结构的存储消耗要高于单个字符串 , 到底该使用 hash 还是字符串 , 需要根据实际情况再三权衡 。
四、set (集合)
Redis 的集合相当于 Java 语言里面的 HashSet , 它内部的键值对是无序的唯一的 。 它的 内部实现相当于一个特殊的字典 , 字典中所有的 value 都是一个值 NULL 。
当集合中最后一个元素移除之后 , 数据结构自动删除 , 内存被回收 。set 结构可以用来 存储活动中奖的用户 ID , 因为有去重功能 , 可以保证同一个用户不会中奖两次 。
五、zset (有序列表)
zset 可能是 Redis 提供的最为特色的数据结构 , 它也是在面试中面试官最爱问的数据结 构 。 它类似于 Java 的 SortedSet 和 HashMap 的结合体 , 一方面它是一个 set , 保证了内部 value 的唯一性 , 另一方面它可以给每个 value 赋予一个 score , 代表这个 value 的排序权重 。 它的内部实现用的是一种叫着{跳跃列表的数据结构 。
zset 中最后一个 value 被移除后 , 数据结构自动删除 , 内存被回收 。zset 可以用来存 粉丝列表 , value 只是粉丝的用户 ID , score 是关注时间 。 我们可以对粉丝列表按关注时间进行排序 。
zset 还可以用来存储学生的成绩 , value 值是学生的 ID , score 是他的考试成绩 。 我们 可以对成绩按分数进行排序就可以得到他的名次 。
以上是咱们介绍的Redis基础入门 , 后续小编会陆续更新Redis实战应用 , 希望大家喜欢 。
请多多点赞评论分享 , 关注小编 , 你们的支持就是小编最大的动力!!!
推荐阅读
- 「周鸿祎」周鸿祎:能力差的往往会成为公司的高管,背后的逻辑一般人看不懂
- 稳糖|难怪血糖一直测不准,记住选对不选贵很重要,不懂怎么选择血糖仪
- 科技俱乐部菌|确实让人看不懂,中国式父亲不称职?他表达爱的方式
- 潮车行天下|能否开着远光灯?老司机:不懂的把车扔了吧,夜间在高速公路行驶
- 「阿里巴巴」腾讯、阿里面试Redis真题精选36道,配合项目实战,助你大厂无忧
- Java@学完Java能干什么?看完好好学吧
- 华为荣耀:华为“618”销量最好的3款千元机:一款意料之中,两款我看不懂
- Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
- 苹果▲一觉醒来跨越很大!iOS迎来史上最大版本,网友:不懂苹果的操作
- 「美团」就是不进厂?美团2个月增加58万骑手,曹德旺表示搞不懂年轻人!