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

Redis(持续更新ing。。。)

一、使用场景

结合简历上的业务回答:

1.缓存(穿透、击穿、雪崩、双写一致、持久化、数据过期策略、数据淘汰策略)

1.1 缓存穿透

定义:查询一个不存在的数据,mysql查询不到数据也不会写到缓存中,导致每次请求都要查询数据库,有可能导致数据库压力增大而宕机。

解决方案:

1.如果MySQL查询结果为空,则将空结果存到缓存中,{key:1,value:null}

2.布隆过滤器

原理:当查询一个id为1的值时,布隆过滤器通过多个哈希函数对id值进行计算,获得hash值,将位图中hash值对应的位置改为1。下一次查询数据时,使用相同hash函数获取hash值,判断对应位置是否都为1。

1.2 缓存击穿

当一个热点数据的key到期时,恰好这个时间对这个key有大量的并发请求过来,这些并发请求可能会瞬间把DB压垮。

解决方案:

1.添加互斥锁:只有一个线程拥有互斥锁,进行缓存重建,其他线程等待。强一致、性能差

2.逻辑过期:一个线程拥有互斥锁,进行缓存重建,其他线程先返回当前结果。高可用、不保证数据绝对一致。

1.3 缓存雪崩

定义:同一时段大量的缓存key同时失效或者redis服务宕机,导致大量请求到达数据库,带来巨大压力。

解决方案:

1.给不同的key的TTL添加随机值

2.利用redis集群提高服务的可用性(哨兵模式、集群模式)

3.给缓存业务添加降级限流策略(ngxin、spring cloud gateway)

4.给业务添加多级缓存(guava、caffeine)

1.4 双写一致性(业务+逻辑)-如何保持redis和MySQL数据的同步呢?

可以用互斥锁,为每个线程的缓存过程添加互斥锁。进一步提高效率,可以使用共享锁和排他锁,在读数据时使用共享锁,其他线程可以共享读操作,在写数据时使用排他锁。

我们的项目中,是把热点数据存入到了缓存中,虽然是热点数据,但是实时性要求没有那么高,所所以,我们当时采用的是异步的方案同步数据。

1.5 持久化(RDB、AOF)

。。。待更新

2.分布式锁(setnx、redisson)

3.计数器

4.保存token

5.消息队列(有哪些数据类型?)

6.延迟队列(有哪些数据类型?)

二、集群

三、事务

四、redis为什么快


http://www.mrgr.cn/news/62923.html

相关文章:

  • 【分布式】分布式场景的系统设计
  • node.js rc4加密/解密 不好用怎么办?
  • Leetcode 搜索二维矩阵
  • ubuntu22.04安装向日葵
  • 玩客云刷机教程Armbian_5.67把你的玩客云改造成一个小型的Linux服务器(保姆级教程)
  • 重学SpringBoot3-Spring WebFlux之SSE服务器发送事件
  • 贪心算法习题其二【力扣】【算法学习day.18】
  • Rust 力扣 - 1343. 大小为 K 且平均值大于等于阈值的子数组数目
  • 博图V19的DB块,批量导入组态王
  • 如何去掉idea的Usage提示
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-9
  • 关于自动驾驶等级相关知识
  • OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
  • “换行”与“回车”
  • 深度数据修复软件哪个好?盘点2024年好用的4个数据恢复工具。
  • Redis新数据类型
  • 科研修图Adobe全家桶access
  • ANA基因组数据库(ANAgdb)
  • 【Leetcode】单调栈
  • 强化学习DQN实践(gymnasium+pytorch)
  • 人工智能生产力悖论:为什么大多数人没用上AI工具?
  • 得物App获评新奖项,正品保障夯实供应链创新水平
  • 今年双11,拼多多吹“新”风
  • tinyint数据库类型
  • SPA——MVC 与 MVVM - 2024最新版前端秋招面试短期突击面试题【100道】
  • 【测试工具】通过Jmeter压测存储过程