redis数据类型

redis 有五种基本数据类型:string(字符型),List(列表),Hash(哈希),set(集合),zset(有序集合)

  1. string(字符串)
    redis的最基本数据类型(可以理解为memcached一样的类型,key->value一个key对应一个value),是二进制安全的(意味着string类型可以存储任何数据类型的数据,比如图片,序列化对象,视屏等),最大可存储512MB的数据,
    redis的数据结构为简单动态字符串(simple Dynamic String)是可以修改的字符串,内部结构是线上类似于JAVA的ArrayList,采用预分配冗余空间的方式减少内存的频繁分配,当string字符串值小于1m时,扩容时会以现有实际分配长度加倍进行扩容,如果大于1M时,每次扩容会增加1M


    image.png
  2. list(列表)
    list实际上是一个双向列表,可以进行双端操作,list里面的元素会按照插入的顺序进行排序
    list的底层是一个quicklist(快速链表),当数据比较少的时候,会将数据放入到一个连续的内存中存储,是一个ziplist(压缩列表),当数据量达到一定的值时,会使用多个ziplist来存储数据,每个ziplist上会有next,pre用来标记上个或下个列表的地址,相比于普通列表,每个元素不需要额外的存储pre,next指针,更加节省空间


    image.png
list-max-ziplist-value : 64  //  ziplist中的每个节点存储的内容不能超过64字节
list-max-ziplist-entries:512 // ziplist中存储的节点数不能高于512
list-max-ziplist-size:  -2 // 每个ziplist总存储量  -1=>4kb -2=>8kb -3=>16kb -4=>32kb -5=>64kb
list-compress-depth : 0 // 是否要对ziplist进行压缩 0是不压缩  1代表压缩头尾  2 代表压缩前两个和后两个ziplist  3 代表压缩前三和后三个ziplist

3.hash(哈希)
hash是一个键值对集合,是一个string类型的field和value的映射表,比较适合存储对象。
hash 对应的数据结构有两种
3.1 数据量比较少时,使用ziplist进行存储数据
3.2 当数据量比较多的时候使用hashtable

hash-max-ziplist-entries 512 // ziplist中的元素应该小于当前值
hash-max-ziplist-value 64 // ziplist中每个元素应该小于当前值
  1. set(集合)
    set是string类型的无需集合,集合成员唯一,所以集合内成员不可重复
    set有两种数据结构
    4.1 intset 当集合里面的数据全为int类型,并且 set-max-intset-entries 512结合中的元素要小于set-max-intset-entries所设定的值
    4.2 字典 ,底层实现是hashtable 当不满足以上条件时,使用hastable
  2. zset(有序集合)
    zset和set不同之处在于,zset有一个double类型的score,,集合可以根据score对集合进行排序,由小到大进行排序
    zset的数据结构有两种ziplist(压缩表),skiplist(跳表)
    不满足一下两种情况使用skiplist
zset-max-ziplist-entries 128 // ziplist的所有元素应小于128字节
zset-max-ziplist-value 64 // ziplist每个节点元素应小于64字节
  1. hyperloglog(基数统计 误差率在0.81%)
    hyperloglog当输入的元素的数量或者体积非常大的时候,基数计算所需要的空间总是固定的,并且非常小,redis中每个Hyperloglog值需要花费12KB的内存就可以计算接近2的64次方个不同元素的基数
    hyperloglog只会根据输入元素来计算基数而不会存储元素本身,这是通set的最大的区别
pfadd key element [element ...] 添加元素
pfcount key  [key...] 获取单个或则多个hyperloglog的基数估计值
pfmerage deskey sourcekey [sourcekey....] 合并多个hyperloglog为一个deskey
  1. bitmap(位图)
    bitmap位图使用每个位表示某种状态,适合处理整型的海亮数据,本质是hashtable的一种应用实现,
    原理:给定一个int整型数据,将int整数映射到对应的位上(将改为的设为1)
    用于统计是否下单,是否登录等状态问题


    image.png
setbit key offset 0/1 // 为偏移量设置位状态
getbit key offset //获取偏移量上的位状态
bitcount key  // 获取key上位状态为1的总数
BITOP:对多个位数组进行按位与、或、异或运算。

8.geo
用于存储地理位置信息,并对存储的信息进行操作.

//用户存储指定的地理空间位置,将一个或者多个地理位置存储到一个key中。
GEOADD key longitude latitude member [longitude latitude member ...] 
// 用于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。
GEOPOS key member [member ...]
// 计算指定key下两个位置之间的距离
GEODIST key member1 member2 [m|km|ft|mi]
// georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
// georadiusbymember 以给定的位置元素为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
    参数说明:
    m :米,默认单位。
    km :千米。
    mi :英里。
    ft :英尺。
    WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
    WITHCOORD: 将位置元素的经度和纬度也一并返回。
    WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
    COUNT 限定返回的记录数。
    ASC: 查找结果根据距离从近到远排序。
    DESC: 查找结果根据从远到近排序。
// redis geo 是使用geohash来保存地理位置坐标
// geohash 用于获取一个或多个位置元素的 geohash 值。
GEOHASH key member

你可能感兴趣的:(redis数据类型)