美文网首页
Redis知识点整理

Redis知识点整理

作者: 缘木求鱼的鱼 | 来源:发表于2020-01-07 12:13 被阅读0次

      Redis无论在实际运用中和面试提问中都十分重要,本文将带大家一起整理一下Redis的重要知识点和常用方法。

    一. 数据类型

      1. Redis有哪些数据类型?
        String, Hash, List, Set, Zset. (相比Memcached优势是拥有丰富的数据类型)。
      1. Zset底层实现?
        底层采用跳表实现,和树有相同的操作(查询,更新,删除)效率,比树实现起来更简单。基于简单的链表结构,分层加速索引效率。


      1. 键过期删除策略?
        惰性删除+定期删除

    二. 操作注意项

      1. keys * (查询所有键值),会阻塞整个服务,用scan代替。
      1. lpop非阻塞式pop,在处理消费者问题时建议用blpop阻塞式pop。
      1. Redis支持事务吗?
        支持。MULTI开启事务,EXEC提交事务,DISCARD回滚事务。
      1. 高并发如何保证数据一致性?
        采用分布式锁,SET key value [ NX|XX]。

    三. 持久化

      1. rdb, 采用save(阻塞服务)或bgsave(默认同步方式,fork复制子进程时短暂阻塞服务) ,对内存进行快照保存。
        优点:dump文件较小,数据恢复快。
        缺点:可能在宕机时未触发bgsave从而丢失数据。bgsave fork子进程,会占用大量内存。
      1. aof,采用增量式保存插入和更新命令。
        优点:数据完整性高。
        缺点:恢复文件可能很大。

    四. 集群

      1. 主从模式(保证高可用加上哨兵机制)。
      1. 集群模式。
        a. 官方推出基于CRC16 算法将key分布于1684个hash槽中。
        b. 实际生产中常用Redis Sharding 客户端分片技术,采用一致性hash算法,将key分布于集群node中。


    五. 其它

      1. 如何保证缓存和数据库数据一致性?
        简单情况下:先删缓存后更新数据库。
        复杂情况下(高并发):请求串行化(引入队列解决)。
      1. 如何处理热点key?
        a. 可以预计热点key时: key + randomValue
        b. 无法预计热点key时:需要对key监控,发现热点key,采用a方案
        c. 采用进程缓存
        d. 最差情况下,限流,拒绝服务
      1. 缓存穿透,雪崩?
        a. 穿透:DB返回null,redis不进行缓存,从而导致该key请求直接打到DB上。
        解决方案:对于无效值提前过滤,或加入缓存。
        b. 雪崩:key设置相同过期时间,大量key同时过期,导致请求打到DB上。
        解决方案:设置随机过期时间。

    相关文章

      网友评论

          本文标题:Redis知识点整理

          本文链接:https://www.haomeiwen.com/subject/gflractx.html