《专题三分布式系统》之《第三章 集中式缓存Redis》之 第一、二节

《第一节 导学引入课》

  • 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操作》

《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中读新数据的办法:
  1. while循环中调用lettuce的api去读取Stream的新的项:List<StreamMessage<String, String>> stream_sms_send = redisSyncCommands.xread(XReadArgs.Builder.block(1000), streamOffsets.toArray(new XReadArgs.StreamOffset[]{}));
  2. 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 简化版布隆过滤器代码示意
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页