Redis概要总结-快速了解Redis

redis 
    -常用数据类型
      string list hash set sorted set
      
    -数据过期策略
     1. redis数据会过期
     2. redis可以手动设置过期时间,但是到了时间数据也不一定会消失
       定期删除+惰性删除
    定期删除:到了时间并不会删除所有过期数据,只会找到一部分并删掉
    惰性删除:查询到这个key的时候,redis再惰性查询下这个数据是不是已过期,过期则删除
    
    -内存淘汰机制
     1. 内存满时,直接报错
     2. 内存满时,删除最近最少使用的key
     3. 随机删除
     4. 只删设置了过期时间并最近最少使用
     
    -redis高并发
       主从架构->一主多从,读写分离->水平扩容 
       
    -redis高可用
    加上哨兵,实现主备切换
    
   -redis持久化,挂掉重启数据恢复
    1. RDB持久化,把redis中的数据每隔一段时间放到RDB文件里
       手动触发:
       save命令:直接阻塞redis服务器,在持久化好之前不进行其它操作
       bgsave命令:创建子线程,持久化操作和其它操作同时进行
       自动触发:
       debug reload命令:重新加载redis,触发save命令
       shutdown命令:如果没开启AOF,触发bgsave
    2. AOF持久化 默认不开启
     AOF缓冲->AOF文件->AOF文件重写->redis服务器重启,加载AOF文件进行数据恢复
     其中重写是为了去除一些无效数据,使AOF文件不至于太大,但是每次重写并不是依据之前
     的AOF文件重写,而是直接依据redis当前缓存数据
     
   -redis可能出现的重大问题
    1. 缓存雪崩 redis宕机了,请求直接到数据库
       解决方案:
        1. redis高可用集群 
        2. 限流+ehcache缓存
        3.redis持久化恢复缓存数据
    2. 缓存穿透 恶意攻击 请求的数据不存在于缓存
       解决方案: 
        1. 布隆过滤器
        2. 校验
        3. 数据库把查询到的值返回到缓存,下次攻击查询缓存
        
   -缓存和数据库的一致性
     问题1:先修改数据库,再删除缓存,如果缓存删除失败,就出现了数据不一致
      解决:先删除缓存,再修改数据库
     问题2:删了缓存之后,数据库还没修改成功,来了读取请求,缓存没有,加载数据库
           旧数据,数据不一致
     解决:读写串行化
     
   -redis并发竞争问题及解决方案
     问题1:多个请求同时修改某个数据,造成数据错误
   解决方案:分布式锁保证同一时刻只能有一个请求修改数据
     问题2:多个请求不按我们期待的顺序修改数据
   解决方案:给每个修改数据的操作加上时间戳,和数据一起存起来,通过比较时间戳
           来确定顺序

你可能感兴趣的:(redis)