redis5种基础数据结构

字符串(String):

字符串是Redis最简单的数据结构,redis的所有key都是字符串类型,然后通过这个key获取不同的Value,不同类型的数据结构差别在于Value的结构不一样。
字符串的使用很广泛,例如我们可以通过序列化用户信息存到字符串里面,key可以是用户ID值,取得时候在反序列化。
Redis的字符串类似于JAVA中的ArrayLIst,都是采用预先分配冗余的空间来减少频繁的内存分配。当字符串大小小于1M时,扩容会扩充一倍的空间,大于1M时,每次扩容1M。单个字符串最大长度为512M。
在这里插入图片描述

列表(List):

Redis的列表相当于我们JAVA中的LinkedList,它是链表不是数组,所以它的增删比较快,时间复杂度为o(1),查询比较慢,时间复杂度为o(n)。
当列表的最后一个元素被弹出,列表会被回收。

字典(hash):

Redis中的hash类似于JAVA中的HashMap,数据结构也是数组+链表(jdk1.8以后,java会变成红黑树+数组),Redis字典的值只能是字符串,这一点也很不同。

hashMap的rehash过程和redis字典的rehash过程不一样,hashMap的rehash过程自己百度了解一下,为什么要rehash,什么时候rehash,rehash过程是什么样子的。
字典的rehash采用渐变式rehash策略,会在rehash过程中保留新旧两个hash结构,查询时也会同时查询两个hash结构,在后续的定时任务中,会慢慢的将旧的hash内容迁入到新的hash。
在这里插入图片描述

Hash也可以用来存储用户信息,用户信息的每一个字段当做key,value值就是字段所对应的值,这样我们可以想取那一部分信息就去那一部分信息。
集合(set):集合类似于JAVA中的hashSet,它内部的键值对是唯一且无序的,所以具有去重功能。

有序列表(zset):

有序列表类似于java的sortedSet和hashMap的结合版,它保证value值唯一,也可以给value一个排序值,它的内部实现是跳跃列表,这里简单介绍一下。
在这里插入图片描述

我们插入一个值时,要保证它的有序性,会根据它的排序值找到位置,因为有序列表是链表结构,不能使用二分查找等等,所以采用跳跃列表来实现。
跳跃列表最底层的元素会串起来,每隔几个元素挑选一个代表出来,这几个代表再用另外一个指针串起来,然后再挑出代表。比如有人要去你老家,你可能来自XX村,总不能这个人把中国所有村遍历一下。你肯定会说来自XX省->XX市->XX县->XX镇->XX村,跳跃列表的思路就是这样类似,这样就可以很快定位到你的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

农业路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值