Redis知识点总结

一.Redis介绍

     Redis是开源的内存数据库,基于BSD协议,是一种NoSQL菲关系型数据库,单机支持10W QPS,网络请求模块实现了单线程,但其他模块还是多线程,至于为什么单线程,官方介绍是CPU不是瓶颈,内存和带宽才是,也是为了避免多线程引发的一系列并发问题,但Redis 6.5引入了多线程提升了性能。Redis不仅是数据库,也可用作缓存、消息中间件等。

二.数据类型

     Redis优于当前主流的memcached和Map的一大好处是支持多种数据类型,有String,hash,list,set,sortedSet类型。String是最基本的类型,值最大能存储512M,Hash适合存储对象,list和set大家并不陌生,但值得一提的是,set底层 是通过hashtable来实现的,SortedSet是加入了优先级,内部通过hashMap和跳表来实现。

三.Redis存在的问题

    缓存雪崩:缓存的过期时间都相同,导致瞬间过期时请求直接访问数据库,Redis形同虚设,导致雪崩。解决方案:随给定过期时间、均匀分布到不同的Redis库和设置热点数据不过期。

    缓存击穿:多个请求打到同一key上,如果该key失效,导致全部打到数据库中。解决方案:只让一个线程去数据库取数据,加互斥锁、提前判定过期时间以做出提前修改和设置永不过期。

   缓存穿透:多出现在黑客攻击上,多个请求获取不存在的key,导致数据库负载过大。解决方案:可以再缓存中加这个key,值为null,过期时间设短、合法校验和布隆过滤器(有误差)。

四.线程模型

              Redis知识点总结

    文件事件分派器使用单线程一个个去请求,多路复用有select、poll和epoll等方式。

五.内存淘汰策略

   定期删除:每隔一段时间随机删除key      惰性删除:用到的key再检查     

   两者结合还是会导致一些没有key回收的问题,从而引出淘汰机制。

             Redis知识点总结

六.持久化

RDB:采用快照存储    AOF:将修改命令存到文件里。很显然,RDB存在一定的误差,用于数据库备份,而AOF需要更多的执行时间,影响性能。

七.主从复制(作用:数据冗余、故障恢复、负载均衡、高可用基石)

(1)从节点执行slaveof命令保存主节点信息

(2)从节点发表定时任务,建立socket连接

(3)主从ping确保通信,进行身份验证。

(4)主节点将数据复制到从节点。

八、数据同步

                                                 Redis知识点总结

     第一次全量,如果中间传递过程断了,根据偏移量增量同步,如果偏移量太早,主节点内存溢出,则再次全量同步。

九.哨兵

                                               Redis知识点总结

哨兵主要功能包括主节点存活检测、主从运行情况检测、自动故障转移、主从切换。其中涉及了主观下线和客观下线。

参考链接:https://xie.infoq.cn/article/0a1848dd6e6ae390d14017f9f?utm_source=feedly&utm_medium=article

https://blog.csdn.net/dianxin113/article/details/103932105

https://mp.weixin.qq.com/s?__biz=MzU2ODcwMzk2MQ==&mid=2247483746&idx=1&sn=5ce6047ef7367965b52fd46513f1dc2f&chksm=fc88afd4cbff26c265345786d8d4e0e2905a98e315398dedd9581841e59d431611c1c7e720f7&token=1863061881&lang=zh_CN#rd