day50_java_基础巩固

简介: 自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!

redis 的持久化:

Redis 提供了两种持久化的方式,分别是 RDB(Redis DataBase)和 AOF(

AppendOnly File)。

RDB,简而言之,就是在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘

等介质上。

AOF,则是换了一个角度来实现持久化,那就是将 redis 执行过的所有写指令记录下

来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现

数据恢复了。

RDB 和 AOF 两种方式也可以同时使用,在这种情况下,如果 redis 重启的话,则会

优先采用 AOF 方式来进行数据恢复,这是因为 AOF 方式的数据恢复完整度更高。

Redis 的缺点:

缓存和数据库双写一致性问题

一致性的问题很常见,因为加入了缓存之后,请求是先从 redis 中查询,如果 redis 中

存在数据就不会走数据库了,如果不能保证缓存跟数据库的一致性就会导致请求获取到的数

据不是最新的数据。

解决方案:

1、编写删除缓存的接口,在更新数据库的同时,调用删除缓存

的接口删除缓存中的数据。这么做会有耦合高以及调用接口失败的情况。

2、消息队列:ActiveMQ,消息通知。

缓存的并发竞争问题

并发竞争,指的是同时有多个子系统去 set 同一个 key 值。

解决方案:

1、最简单的方式就是准备一个分布式锁,大家去抢锁,抢到

锁就做 set 操作即可

缓存雪崩问题

缓存雪崩,即缓存同一时间大面积的失效,这个时候又来了一波

请求,结果请求都怼到数据库上,从而导致数据库连接异常。

解决方案:

1、给缓存的失效时间,加上一个随机值,避免集体失效。

2、使用互斥锁,但是该方案吞吐量明显下降了。

3、搭建 redis 集群。

缓存击穿问题

缓存穿透,即黑客故意去请求缓存中不存在的数据,导致所有的请求都怼到数据库上,

从而数据库连接异常。

解决方案:

1、利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,

再去请求数据库。没得到锁,则休眠一段时间重试

2、采用异步更新策略,无论 key 是否取到值,都直接返回,

value 值中维护一个缓存失效时间,缓存如果过期,异步起一个线程

去读数据库,更新缓存。

相关文章
|
存储 边缘计算 人工智能
探索边缘计算:定义、优势、挑战及未来趋势
探索边缘计算:定义、优势、挑战及未来趋势
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
478 156
Parsing error: The keyword ‘const‘ is reserved
Parsing error: The keyword ‘const‘ is reserved
|
算法 C语言
C语言——最大公因数和最小公倍数
C语言——最大公因数和最小公倍数
776 0
|
监控
构建三维一体立体化监控,看这一篇就够了!
如果你需要搭建一套能够立体化监控你的应用及业务,出现问题及时告警的监控体系,这篇文章应该是你所需要的!
797 0
构建三维一体立体化监控,看这一篇就够了!
|
数据安全/隐私保护
BurpSuite8.2 -- 解决参数加密问题
BurpSuite8.2 -- 解决参数加密问题
358 0
|
Kubernetes Devops 数据中心
Terraform 系列 - 什么是 IaC?
Terraform 系列 - 什么是 IaC?
|
芯片
AW2013芯片讲解
AW2013芯片讲解
485 0
FreeRTOS入门教程(信号量的具体使用)
FreeRTOS入门教程(信号量的具体使用)
376 0
|
开发者 索引
QT基础教程(布局管理器)
QT基础教程(布局管理器)
458 0