redis数据类型

1.五大基本数据类型

1.String:

最简单的类型,采用key-value的形式,一个String只能存储一组信息。value允许的最大存储容量为512MB。

String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。

数据结构:

String的实现结构类似于Java的ArrayList数组:会先分配一个默认存储容量。每次扩容时都是在当前存储容量的基础上翻倍。与ArrayList的扩容不同的是,当字符串小于1MB时,每次扩容会加倍。大于1MB时,每次扩容只会增加1MB,达到其最大容量512MB时,不会再进行扩容。

2.list

类似于Java等语言的LinkedList 特点是单键多值,按照插入顺序排序(头插,尾插)。

其底层是是一个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

数据结构:

List的数据结构为每个节点都为zipList的quickList的双向链表,每个zipList是一段连续的存贮空间,可以把它看成一个数组,zipList实际上还包含了所占字节数,元素个数,偏移量等信息。深入了解请看Redis内部数据结构详解(4)——ziplist - 铁蕾的个人博客 (zhangtielei.com)

3.set

与list类似的单键多值,不同点是无序存储与不可重复存储。它的底层是一个value值均为0的一个hash表所以添加,删除,查找的复杂度都是O(1)

数据结构:

Set数据结构是dict字典,字典是用哈希表实现的。

Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。

4.hash

类似于java中的Map再嵌套一层Map(Map<String,Map<String,Object>>),redis中hash的key对应最外层map的key,filed对应内层Map的key,value对应内层Map的value。

数据结构:

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。

5.Zset

有序的set,与普通set不同的是:Zset的每个key对应的多个元素都需要指定一个叫做score的权值。这样就可以获取一个范围内的set元素

SortedSet(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。

zset底层使用了两个数据结构

(1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。

(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

2.新的数据类型

1.BitMaps

Bitmaps实际上也是一种key-value,与普通key-value不同的是,Bitmaps的value只能是0或1,Bitmaps的key代表偏移量是“数位”的位置。

例:

每个独立用户是否访问过网站存放在Bitmaps中, 将访问的用户记做1, 没有访问的用户记做0, 用偏移量作为用户的id。

设置键的第offset个位的值(从0算起) , 假设现在有20个用户,userid=1, 6, 11, 15, 19的用户对网站进行了访问, 那么当前Bitmaps初始化结果如图

2.hyperloglog

与set类似,只能存放不重复的元素。不同的是:hyperloglog只用来记录存入的元素的数量,不记录存入元素的具体值。

3.Geospatial

用来存放坐标的类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操

作。

3.碎碎念

首先是感觉redis的命名真的好随便,再是体会到了数据结构的强大之处。

今天先来记录一下每个类型的概念和大概用法,以后有能力了再去研究底层实现把

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值