数据结构
  1. 字符串
    getset:返回旧值,设置新值
    setnx key value 如果key不存在的话设置,没有工夫参数
    setex key 60 value,key存在的时候设置,并且有工夫参数
// sds数据结构type sds struct {    free int    len int    buffers []int}1. sds 和c比拟    1. 获取长度O(1),c是O(N)    2. 杜绝了缓冲区的溢出,因为c不查看字符串的长度,很容易笼罩到其余字符串    3. 内存重调配次数,C操作的字符串数组,每次减少或者删除,都要进行内存调配操作,遗记开释内存,会导致内存泄露,减少不查看,会导致缓冲区溢出,内存重调配可能会进行零碎调用,影响性能    4. redis 采纳空间预调配,和惰性开释,保障字符串的扩大和缩容高效。    5. 二进制平安2. 编码方式    1. int编码,如果整数能用long示意的     2. embstr编码:redis对象和sds在空间是上间断的,调配一次内存 小于44字节    3. raw:redis对象和sds对象不在一起,内存调配两次
  1. 哈希

      1. 先计算哈希值  2. 计算索引值,而后放到hash表上
  2. 列表

    type listNode struct { next *listNode pre  *listNode val }redis 链表是一个双向的
  3. 汇合

    汇合的中的元素无无序的,所以不能依据下标返回,只能返回所有汇合能够计算并集,交加,差集,判断元素是否属于汇合,随机返回一个汇合或者多个汇合实现形式:intsettypedef struct intset {uint32_t encoding;uint32_t length;int8_t contents[];} intset;intset 数据是有序的,从小到大排序,能够进行二分查找
  4. 有序汇合
    1.压缩列表
    2.跳表

redis 过期策略和内存淘汰策略
过期策略:

  1. 定期删除策略:每隔一段时间从过期的key中,随机筛选一部分key进行删除(100ms运行一次)
  2. 惰性删除策略:当拜访过期key的时候进行删除。
  3. 定时删除: 在设置过期的键的同时,发明一个定时器,等到过期的到来时,立即删除(对cpu不敌对)

redis采纳惰性删除,和定期删除策略

惰性删除可能保障获取曾经过期的key必定会删除,不会影响业务,
定期删除的话,必定有些key'没有被删除掉,且不会拜访,就会始终留在内存外面,
这样的话就会有内存淘汰策略

  1. 从所有的key,设置过期工夫的key,采纳lru算法
  2. 从所有的key,设置过期工夫的key,采纳随机淘汰的算法
  3. 从设置了过期工夫的key,看那个最先过期,就淘汰那个
  4. 不淘汰,写入间接返回谬误