redis 数据类型

数据类型:

数据类型 名字 编码
list 列表 ziplist 、linkedlist
hash 哈希表 ziplist、hashmap
string 字符串 SDS
set 集合 IntSet
sorted set 有序集合 skiplist
  1. SDS = simple dynamic string 简单动态字符串;string类型
  2. 双向链表:list类型
    1. 即可用作栈,也可以做队列;
    2. 包含head tail 指针,list 长度;
    3. void * 万能指针,实现多台;
  3. 字典:Hash 类型,set 集合
    1. 数据结构
    2. 哈希算法:

      使用字典设置的哈希函数,计算键 key 的哈希值

      hash = dict->type->hashFunction(key);

      使用哈希表的 sizemask 属性和哈希值,计算出索引值

      根据情况不同, ht[x] 可以是 ht[0] 或者 ht[1]

      index = hash & dict->ht[x].sizemask;
      当字典被用作数据库的底层实现, 或者哈希键的底层实现时, Redis 使用 MurmurHash2 算法来计算键的哈希值。MurmurHash 算法目前的最新版本为 MurmurHash3 ;
  4. 跳跃表:sortedset 有序集合类型,性能和红黑树类似
    1. 链表加多级索引的结构,就是跳表, 实现二分查找;所以时间复杂度logN;
    2. 索引数量是a1=n/2 ,an=2,q=1/2 所以,Sn=(a1-anq)/1-q=n-1 ,即空间复杂度O(n);
    3. 有序链表,插入需要查找,所以O(logN);删除O(logN)
  5. 整数集合;set 类型;
    1. 有序数组,整数集合是集合键的底层实现之一。
    2. 整数集合的底层实现为数组, 这个数组以有序、无重复的方式保存集合元素, 在有需要时, 程序会根据新添加元素的类型, 改变这个数组的类型。
    3. 升级操作为整数集合带来了操作上的灵活性, 并且尽可能地节约了内存。
    4. 整数集合只支持升级操作, 不支持降级操作。
  6. 压缩列表(ziplist);
    1. 是列表键和哈希键的底层实现之一;
  7. 对象:
    1. Redis 数据库中的每个键值对的键和值都是一个对象。
    2. Redis 共有字符串、列表、哈希、集合、有序集合五种类型的对象, 每种类型的对象至少都有两种或以上的编码方式, 不同的编码可以在不同的使用场景上优化对象的使用效率。
    3. 服务器在执行某些命令之前, 会先检查给定键的类型能否执行指定的命令, 而检查一个键的类型就是检查键的值对象的类型。
    4. Redis 的对象系统带有引用计数实现的内存回收机制, 当一个对象不再被使用时, 该对象所占用的内存就会被自动释放。
    5. Redis 会共享值为 0 到 9999 的字符串对象。
    6. 对象会记录自己的最后一次被访问的时间, 这个时间可以用于计算对象的空转时间。
  8. 数据库:
    1.

原始文章:
https://mp.weixin.qq.com/s?__biz=MzI5NzAzOTM4MQ==&mid=2648093049&idx=1&sn=9274af76149189ba4f5e45cd55308f15&chksm=f4993203c3eebb15b380b9ee314ed1e3b580ba5303208be5fc57c34fa86b27d99ae7b14fadb3#rd

https://www.jianshu.com/p/c706d050d2f8

WRITTEN BY:    陈贞

个人博客