Redis 复习

数据结构:字符串、集合、hash、zset和set
    底层数据结构:简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表
        简单动态字符串:开辟已知大小的空间。value被删除时,先不进行空间回收,惰性空间释放
        链表:双端、五环、带链表长度计数器和多态
        字典:采用hash数据结构,hash冲突的解决方案是链地址法
            触发扩容的条件:
                1、服务器目前没有执行BGSAVE命令或者BGREWRITEAOF命令,并且负载因子大于等于1
                2、服务器目前正在执行BGSAVE命令或者BGREWRITEAOF命令,并且负载因子大于等于5
            渐进式rehash:
                扩容和收缩操作不是一次性、集中完成的,是分多次、渐进式完成的。
        跳跃表:
        整数集合:
        压缩列表:
            原理:压缩列表并不是对数据利用魔种算法进行压缩,而是将数据按照一定规则编剧在一定连续的内存区域,目的是节省内存
        
    持久化:
        持久化方式:RDB和AOF
        RDB方式:(默认)
            数据存储:二进制数据
        AOF方式:(需要开启配置)
            数据存储:命令操作
            三种配置方式:
              # appendfsync always
                appendfsync everysec(默认)
            # appendfsync no  
    Redis架构模式:
        单机版:
            特点:简单
            问题:1、内存容量有限 2、处理能力有限 3、无法高可用
        主从复制:
            特点:1、master/slave角色 2、master/slave数据相同 3、降低master读压力在转交从库
            问题:无法保证高可用,没有解决master写的压力
        哨兵:
            分布式系统中监控redis主从服务器,并在主服务器下线时自动进行故障转移。三个特性:监控、提醒和自动故障迁移
            特点:1、高可用 2、监控哥哥节点 3、自动故障迁移
            问题:主从模式,切换需要时间、丢数据
        集群:
            特点:1、五中心架构 2、数据按照slot存储分布在多个节点,节点间数据共享,可动态调整数据分布 3、可扩展性 4、高可用性
            5、实现故障自动failover,节点直接统统gossip协议交换状态信息
            redis slot槽点:16384个哈希槽
            一致性哈希:
                原理:0~2的32次-1的桶空间,通过hash算法银蛇到环上
                虚拟节点:
                    解决的问题:服务器节点太少时,容易因为节点分布不均匀而造成数据倾斜问题
    缓存穿透、缓存击穿和缓存雪崩
        缓存穿透:
            问题:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源
            解决方案:1、布隆过滤器 2、将key缓存下来,并设置失效时间
        
        缓存击穿:
            问题:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到魂村,
            这个时间大并发的请求可能会瞬间把后端DB压垮
            解决方案:使用互斥锁(mutex key)。SETNX,只有不存在的时候才设置,可以利用它来实现锁的效果
        
        缓存雪崩:
            问题:当缓存服务器重启或者大量缓存在某一个时间段失效,这样在失效的时候,也会给后端系统带来很大压力
            解决方案:使用锁或队列、设置过期标志更新缓存、未key设置不同的缓存失效时间

    三种key过期策略:
        定时删除:
            含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,瑞key删除
            优点:保证内存被尽快释放
            缺点:
                若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要花时间删除这些key
                定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器长生),性能影响严重

        惰性删除:
            含义:key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null
            优点:删除操作只发生在数据库去除key的时候发生,而且只删除当前key,对CPU时间占用比较少
            缺点:若大量的key在超出时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄漏

        定期删除:
            含义:每隔一段时间执行一次删除过期key操作
            优点:
                通过限制删除操作的时长和频率,来减少删除操作对CPU时间的占用--处理“定时删除”的缺点
                定时删除过期key--处理“惰性删除”的缺点
            难点:
                合理设置删除操作的执行时长和执行频率
    
    缓存淘汰策略:
        问题:内存空间用满,需要如何处理?
        答:缓存淘汰策略
        volatile-lru ->只限于设置了expire的部分,有限删除最近使用(less recently uesd, LRU)的key
        allkeys-lru -> 所有key通用,随机删除一部分key
        volatile-lfu -> 只限于设置了expire的部分,有限删除最少使用(less frequently uesd, LFU)的key
        allkeys-lfu -> 删除所有的key
        volatile-random -> 随机删除所有设置有效时间的key
        allkeys-random -> 随机删除所有的key
        volatile-ttl -> 删除过期时间最近的key
        noeviction -> (默认策略)对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值