第一讲:为何学习redis?
本学习笔记讲解redis6
一:为何学习redis?
(1):高性能
底层C语音编写,内存数据库,通讯采用epoll非阻塞I/O多路复用机制;(开发者本人对操作系统非常精通)
(2):线程安全
redis的操作都是单线程的,保证了原子操作,这样的设计可以保证避免高并发场景下数据不安全的问题;(对于redis6有人说已经是多线程的了,多线程主要体现在网络数据解析和同步数据上,对于底层内部的核心操作还是单线程来完成的,)
(3):功能丰富
3.1:数据结构
a:基本数据结构:String,List,HashSet,SortedSet
b:高阶数据结构:GEO,BitMap,HyperLogLog
3.2:持久化机制
Redis的数据结构都是存放在内存当中的,但是在某些场景下,我们也希望把某些数据给存储起来,所以redis提供了对应的持久化机制;
a:RDB持久化
b:AOF持久化
c:RDB-AOF混合持久化;
3.3:主从模式
redis提供了主从模式Master-Slave来解决并发问题;
3.4:哨兵机制
主从模式下要考虑到主节点是不能故障的,所以redis提供了哨兵机制Sentinel来解决主节点单点故障的问题;通过哨兵机制监护主节点,主节点故障以后,自动的完成主从切换;
3.5:集群
数据比较多的时候,数据存储可以使用cluster集群分片存储的方式;
3.6:模块化
redis在4.0的时候还引入了模块化机制,可以让我们自定义在项目中的个性化需求;
总结:正因为如此丰富的功能可以满足很多的互联网应用场景,比如
(1):缓存
(2):分布式锁
(3):队列
(4):集合
(5):GEO
(6):BitMap操作等
二:通过美食社交应用项目来学习Redis


最终架构如下图

我们将应用服务化注册-注册中心,然后通过网关进行统一的进行认证访问;最终的重点放在redis模块,我们的目标是搭建三主三从的redis集群,支撑整个项目的业务使用;并且在学习中我们是进行逐步的redis业务架构升级的:单节点---主从---哨兵---集群
三:学习方法: 以问带学
Level0:系统搭建 SpringBoot整合Redis SpringCloud搭建微服务
系统搭建好了以后系统的响应慢?
Level1:用最合适的数据类型来缓存(因为redis底层针对不同的数据类型存储的时候会做一个优化处理)然后可以通过查看慢日志,优化BigKey,使用连接池来进行优化;
系统的响应慢问题解决后,缓存异常了怎么办?
Level2:分布式锁,LUR淘汰算法来解决缓存异常问题(这里还会学习缓存雪崩,缓存穿透,缓存击穿这些问题的解决方案)
缓存异常解决了,数据丢失,数据不安全,数据一致性怎么办?
Level3:可以采用RDB-AOF混合持久化的机制,在主从模式下还要考虑什么时候要全部复制,什么时候要部分复制,以及主从数据复制的一致性问题:
数据问题解决了,主从复制故障如何解决?
Level4:通过哨兵模式监控主节点,可以让我们自动的完成主从切换(哨兵是如何工作的,以及底层原理这里都会讲解);
主从复制故障解决了以后,随着项目发展数据增多,存储不够用怎么办?
Level5:可以通过集群的分片存储来解决这个问题(会学习到集群的内部原理,以及集群内部的哨兵机制和单独的哨兵机制会有什么不同?以及故障自动转移的学习);
存储问题解决以后,服务器宕机怎么办?
Level6:可以通过集群动态收缩,MOVED/ASK转向,故障演示与恢复方案来解决;
三:扩充学习



浙公网安备 33010602011771号