《第一节 导学引入课》
- Redis学习资料和工具:
- 22:30 Redis的部署
《3.2.1 redis入门》
- 4:54+ redis-5.0.3的安装
- 17:15 改语言:
- 20 启动redis的命令:
./src/redis-server
- 23:54 用配置文件redis.conf启动redis的命令:
./src/redis-server redis.conf
- 24:14 查看与redis相关的进程:
ps -ef | grep redis
- 通过redis自带的客户端工具cli访问redis:
./src/redis-cli -h 127.0.0.1 -p 6379
《3.2.2 Redis操作》
- 11:10 redis官方命令列表: https://redis.io/commands
《3.2.3 教你利用Redis支撑十万级并发》
-
7:8 此处我用测试代码连接虚拟机中的redis失败,为此我对虚拟机linux做了两处修改,具体记录在在centos7上安装redis5.0.4#网络与防火墙设置
-
Redis适用于读多写少的场景
-
示例项目使用了org.springframework.jdbc.core.JdbcTemplate而非Mybatis来连数据库
《3.2.4 spring与redis集成方式及缓存注解原理》
- 5:7 RedisTemplate
- 13:30 @EnableCaching @Cacheable cacheManager
- 22:30 @CacheEvict //方法执行结束,清除缓存
- 35:40 @Cacheable的底层原理是AOP的环绕增强
《3.2.5 直播系统后台接口中是如何使用Redis的》
使用WebSocket+Redis,未使用Mysql
- 3分 Spring中的WebSocket
《3.2.6 基于Redis实现直播间聊天室后台支撑系统》
- 2:10 架构:收到新消息存到Redis;用专门的线程从Redis读取所有服务器存的新数据,一旦触发就用websocket推送
- Stream: from Redis5.0, 使用场景:消费者生产者场景(类似MQ)
- 不停从Redis中读新数据的办法:
- while循环中调用lettuce的api去读取Stream的新的项
:List<StreamMessage<String, String>> stream_sms_send = redisSyncCommands.xread(XReadArgs.Builder.block(1000), streamOffsets.toArray(new XReadArgs.StreamOffset[]{}));
- 31:40 redis subscribe
- 32:38 Spring Data Redis
《3.2.7 带你用Redis实现附近的帅哥美女查询功能》
- 架构:
- 使用Redis的数据结构: GEO
《3.2.8 发布订阅机制》
- 前: Redis的发布、订阅命令 :
subscribe channel
publish channel
- 7:45
monitor
命令可反映redis接受到的所有命令 - 8:40 keyspace notification
-
- 16:55 监听reids的expire事件,使得超时订单失效
《3.2.9 redis持久化机制-成片》
- 7:25左右 rdb操作
- 13:18+ aof
- 补充:aof重写,原理参照《java面试突击》pdf, 具体操作可参考:redis持久化的AOF重写机制,如手动通过命令在后台开始重写功能:
bgrewriteaof
《3.2.10 Redis内存管理-成品》
- 9:13 Redis内存回收策略
-
- 12:23 LRU (Least recently used,最近最少使用)
-
- 13:21 LFU (Least frequently used)
《3.2.11 Redis主从复制-成品》
-
5:55
成为114的从:slaveof 192.168.1.114 6379
退出从:slaveof no one
查询主从状态:info replication
-
31:29 Redis主从,写主,读从,主Redis为了性能缘故关闭了持久化(从Redis开持久化),导致一个问题:当主Redis因故障重启,其数据会清空,从而导致从Redis的数据也被清空。解决办法:
办法1: 当主因故关闭,从slaveof no one;主起动后,slavof slaveip 6379; 当数据从原从同步到原主后,再改回来原来的主从关系。
办法2:当主因故关闭,把从Redis的持久化文件拷到主 -
实时显示Redis收到的命令:
monitor
-
34:32 对应Redis主从 - 读写分离模式 的 Java代码
《3.2.12 Redis哨兵高可用机制-成品》
-
客户端询问哨兵主Redis地址。当客户端已经连接上Redis,暂时不再需要哨兵。切换主Redis需要一定数量的哨兵确认:
-
13:49 哨兵的一些关键配置:
-
42分± 图右下部分参考《3.3.6 缓存中间件Redis Sentinel高可用组件》33分
-
49:14 哨兵之间如何通信:发布、订阅
-
52 14 哨兵之间的领导选举机制:Raft算法
-
最终的主从切换:
-
75 10 1主2从,3哨兵。当网络分区,可能出现数据不一致或丢失。Redis集群非强一致,而是最终一致
《3.2.13 Redis集群分片存储》
- 前段: Redis集群示意图:
- 23:10 开启集群的设置:
3主3从:
- 48:27 读写分离在集群模式下行不通,因为:
《3.2.15 缓存失效导致雪崩的危害及应对方案》
- 12:20 Redis数据失效的场景:
- 32:30 方案一:用java的Semaphore限流
- 43:30 方案二:Semaphore.tryAcquire(timeout…),容错降级
《3.2.16 缓存击穿的风险和应对方案》
- 27 30 简化版布隆过滤器代码示意