当前位置: 首页 > news >正文

redis复习

redis知识点

  • redis持久化
  • redis 订阅发布模式
  • redis主从复制
  • 哨兵模式
  • redis雪崩,穿透
  • 缓存击穿(请求太多,缓存过期)
  • 缓存雪崩

redis持久化

redis是内存数据库,持久化有两种方式,一种是RDB(redis database),一种是AOF(append only file)。
rdb的持久化方式是定期将redis内存内容写入rdb临时文件,(fork子进程,通过子进程来写文件,主进程接着执行redis业务),写入完成后替换以前的快照文件。保存的文件一般是dump.rdb。恢复是重启redis时,数据被自动恢复。
aof的持久化是通过对执行的每条命令,存取日志文件,将redis执行过程中的每条命令记录下来。恢复时读取该文件将每条redis命令重新执行,以达成数据的恢复。

aof持久化的效率比rdb的效率低,文件也比rdb大,修复速度也比较慢。但是因为是每条命令都记录,实时性比较好,基本不会丢命令。

如果同时开启两种持久化方式,则优先使用aof方式恢复

redis 订阅发布模式

一个redis cli订阅某个频道,通过SUBSCRIBE 命令 如下:

redis 127.0.0.1:6379> SUBSCRIBE redisChat

Reading messages… (press Ctrl-C to quit)

  1. “subscribe”
  2. “redisChat”
  3. (integer) 1

其他redis cli往此频道发消息,如下:

redis 127.0.0.1:6379> PUBLISH redisChat “Redis is a great caching technique”

(integer) 1

redis 127.0.0.1:6379> PUBLISH redisChat “Learn redis by mszlu.com”

(integer) 1

订阅者的客户端会显示如下消息

  1. “message”
  2. “redisChat”
  3. “Redis is a great caching technique”
  4. “message”
  5. “redisChat”
  6. “Learn redis by mszlu.com”

可以实现简单的消息同步

redis主从复制

将一台redis的数据,复制到另一台redis,前者称为主节点,后者称为备节点
作用:

  1. 数据冗余,是持久化之外的一种数据冗余方式
  2. 故障恢复,主节点出问题,由从节点提供服务,实现快速故障恢复
  3. 负载均衡,主节点负责写,从节点负责读,读比较多时候,可以让多个从节点负载读操作
  4. 是哨兵模式和集群能够实施的基础
    复制有全量同步和增量同步,全量同步是在从redis连接主redis时触发

哨兵模式

哨兵模式

哨兵是一个独立的进程,此进程通过向redis实例发消息,看有没有响应来判断redis是否故障,哨兵检测到master挂了,首先会选一个slave节点,将他变为主节点,然后通过发布订阅模式通知从节点重新选主

多哨兵模式
在这里插入图片描述
多个哨兵互相监控,如果多个哨兵都发现主节点故障,才会选出一个哨兵进行failover

redis雪崩,穿透

缓存穿透,redis中都没有数据,程序都去sql中查,造成sql压力
在这里插入图片描述
解决方法1 布隆过滤器 对查询的请求规则,做一次过滤(过滤基准是对所有可能的查询参数先以hash方式存储),布隆过滤器,不符合要求的请求直接扔掉。
在这里插入图片描述
解决方法2 缓存空值
在这里插入图片描述

缓存击穿(请求太多,缓存过期)

缓存击穿,是指一个 key 非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个 key 在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

解决方案1,设置热点数据永不过期

解决方案2,加互斥锁,将高并发的压力转移到分布式锁上

缓存雪崩

缓存雪崩,是指在某一个时间段,缓存集中过期失效。

产生雪崩的原因之一,比如马上就要双十二零点,,很快就会有一波抢购,这波商品时间比较集中的放在了缓存,假设缓存一个小时。那么到了凌晨一点钟的时候,这批商品的缓存就都会过期了。而对这批商品的访问查询,都落到数据库上,对于数据库而言,就会产生周期性的压力波峰。于是所有的请求都会到达存储层,存储层的调用量会暴增,造成存储层也回掉的情况。

http://www.lryc.cn/news/376799.html

相关文章:

  • SUSE linux的快照和恢复
  • 【Qt快速入门(六)】- QLineEdit按钮的使用
  • 常用损失函数详解:广泛使用的优化约束方法
  • 鸿蒙开发组件:【创建DataAbility】
  • 配电室数据中心巡检3d可视化搭建的详细步骤
  • TIME_WAIT的危害
  • 搜维尔科技邀您共赴2024第四届轨道车辆工业设计国际研讨会
  • 智能中人类造成的风险、机器造成的风险、环境造成的风险
  • MYSQL基础查询
  • 【Golang】Go 中的生产者-消费者模式
  • 【通过新能源汽车的智慧数字底盘技术看计算机的相关技术堆栈?以后是软硬结合的全能程序员的天下,取代全栈(前后端都会的全栈程序员)】
  • Python网络爬虫4-实战爬取pdf
  • 超神级!Markdown最详细教程,程序员的福音
  • Android OTA 升级基础知识详解+源码分析
  • 【吊打面试官系列-Mysql面试题】SQL 语言包括哪几部分?每部分都有哪些操作关键字?
  • Redis的缓存击穿与解决
  • 网络层 IP协议【计算机网络】【协议格式 || 分片 || 网段划分 || 子网掩码】
  • Python学习笔记14:进阶篇(三)。类的终结篇,类的导入和模块的导入。
  • C++ lambda表达式举例
  • 持续总结中!2024年面试必问 20 道设计模式面试题(五)
  • 嵌入式面经111题答案汇总(含技术答疑)_嵌入式项目源码分享
  • 鸿蒙开发通信与连接:【@ohos.connectedTag (有源标签)】
  • 在线编程工具
  • NSSCTF中的[WUSTCTF 2020]朴实无华、[FSCTF 2023]源码!启动! 、[LitCTF 2023]Flag点击就送! 以及相关知识点
  • Vue49-props属性
  • CVE-2020-1957 漏洞复现
  • 网工内推 | 中国电信、香港宽频系统工程师,CCIE认证优先,最高年薪25w
  • LLVM后端 td文件 tablegen 模式匹配 寄存器 指令集 calling convention
  • 嵌入式交叉编译:frp
  • SpringBoot实现的大文件上传