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实战应用 , 希望大家喜欢 。
请多多点赞评论分享 , 关注小编 , 你们的支持就是小编最大的动力!!!


推荐阅读