本文介绍: 双缓存缓存1中设置过期时间缓存2中在启动加载,进行缓存预热,先访问缓存1,如果有值则返回缓存1没有值,则访问缓存2,返回数据,并启动异步更新线程来同时更新缓存1和缓存2的数据,如果value特别大的话会占用很多内存内存利用率低。只让一个线程构建缓存,其他线程等待构建缓存的线程执行完,重新从缓存中获取数据,保证了每个时刻只有一个线程在执行请求,但是会导致很多线程等待一个线程,降低了系统qps利用互斥锁,缓存中没有,先获取锁,再去请求数据库写入缓存,这样后面的数据可以从缓存中拿到数据了。

redis缓存问题

缓存击穿

缓存击穿是指热点key在某个时间过期时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db

解决方案

缓存穿透

请求缓存和数据库中不存在数据,导致每次请求都到数据库中去查询,导致数据库压力过大

解决方案

缓存雪崩

缓存同一时间大量失效或者由于某些原因缓存不能提供服务,导致大量请求直接访问数据库,从而导致数据库压力倍增,造成数据库也宕机

击穿区别:雪崩是很多key过期,击穿是某个热点key

解决方案

需要预防缓存宕机

缓存一致问题

如何保证缓存与数据库一致呢?先删除缓存,然后加锁获取数据

读的时候,先读缓存在数据库数据库取出数据后放入缓存;更新的时候先更新数据库,再删除缓存

https://zhhll.icu/2021/数据库/非关系型数据库/redis/基础/11.redis缓存问题/

本文mdnice平台发布

61469895-7e4f-4491-8ba5-b63939b30b10

原文地址:https://blog.csdn.net/Lxn2zh/article/details/134683297

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34434.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注