五种基本数据类型
String(字符串)
- 简介:String是Redis最基础的数据结构类型,它是二进制安全的,可以存储图片或者序列化的对象,值最大存储为512MSDS动态字符串,是一个简单的动态字符串,采用预分配冗余空间的方式来减少内存的频繁分配,类似于Java中的ArrayList;
Hash(哈希)
- hash是一个键值对的集合,hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似于Java里面的map,hash特别适合用于存储对象hash对应的数据结构是ziplist和hashtable(哈希表)当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable
List(列表)
- 单键多值,按照插入顺序排序,你可以添加一个元素列表的头部或者尾部底层实际上是一个双向链表,对两边的操作性能很高,通过索引下标的操作中间的节点性能会比较差lpush,rpush命令,
- 可以从左右两边插入值值在键在,值光键亡list的数据结构为快速数据链表quiklist
- 首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构式ziplist,也即是压缩列表将所有的元素挨着一起存储,分配的是一块连续的内存,当数据量比较多的时候才会变成quiklist
- 因为普通的列表需要的附加指针空间太大,会比较浪费空间,比如这个列表里存的只是int类型的数据,结构上还需要两个额外的prev和next
- redis将链表和ziplist结合起来组成了quiklist。也就是将多个ziplist使用双向指针串起来,这样既满足了快速的插入删除性能,又不会出现太大的空间冗余
Set(集合)
set是string类型的无序集合,他底层其实是一个value为null的hash表,所以添加、删除、查找的复杂度都是o(1)一个算法,随着数据的增加,执行的时间长短,如果是O(1),数据增加,查找数据的时间不变set的数据结构是dist字典,字典是hash表实现的Zset(有序集合)
redis有序集合zset,与普通集合set非常相似,是一个没有重复元素的字符串集合不同之处是有序集合的每个成员都关联了一个评分,这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分是可以重复的因为元素是有序的,所以也可以很快的根据评分或者次序来获取一个范围的元素访问有序集合的中间元素也是非常快的,hash,hash的作用是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到对应的score值跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表跳跃表的效率堪比红黑树,实现远比红黑树简单,可以快速找到元素三种特殊数据类型
Geospatial
Bitmaps本身不是一种数据类型,实际上它就是字符串(key-value),但是它可以对字符串的位进行操作Bitmaps单独提供了一套命令,所以在Redis中使用BitMaps和使用字符串的方式不太相同,可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫偏移量Hyperloglog
可以用来统计页面访问量数据存储在MySQL表中,使用distinct count计算不重复的数使用redis提供的hash,set,bitmaps等数据结构来处理以上方案的结果精确,但随着数据不断增加,导致占用空间越来越大,对于非常大的数据集是不切实际的HyperLoglog是用来基数统计的算法,优点:在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的,并且很小什么是基数:比如数据集{1,3,5,7,5,7,8},那么这个数据集的基数集就为{1,3,5,7,8},基数(不重复元素)为5,基数估计就是在误差可接受范围内,快速计算基数Bitmap
提供了经纬度设置,查询,范围查询,距离查询,经纬度hash等常见操作命令geoadd 添加地理位置(经度,纬度,名称)命令geopos 获得指定地区的坐标值命令geodist 获取两个位置之间的直线距离命令georadius,以给定的经纬度为中心,找出某一半径内的元素郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。