首页 > 数据库 >Redis篇-redis使用场景-缓存-缓存击穿-03

Redis篇-redis使用场景-缓存-缓存击穿-03

时间:2024-01-19 11:58:22浏览次数:40  
标签:03 缓存 设置 过期 击穿 redis 并发 key

1 缓存击穿

缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮。

1.1 解决方案一:互斥锁

1.2 解决方案二:逻辑过期

总结:

缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮;

解决方案一:互斥锁,强一致,性能差;

解决方案二:逻辑过期,高可用,性能优,不能保证数据绝对一致。

面试文稿:

问:什么是缓存击穿?怎么解决?

答:嗯!!缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把DB压垮。

解决方案有两种方式:

第一可以使用互斥锁:当缓存失效时,不立即去load db,先使用如redis的setnx去设置一个互斥锁,当操作成功返回时在进行load db的操作并回设缓存,否则重试gei缓存的方法。

第二种方案可以设置当前key逻辑过期,大概的思路如下:

1)在设置key的时候,设置一个过期时间字段一块存入缓存中,该字段用来做逻辑过期,不给当前key设置过期时间;

2)当查询的时候,从redis取出数据后判断时间是否过期;

3)如果过期则开通另一个线程进行数据同步,当前线程正常返回数据,这个数据不是最新。

当然两种方案各有利弊:

如果选择数据的强一致性,建议使用分布式锁的方案,性能上可能没有那么高,锁需要等,也有可能产生死锁的问题;

如果选择key的逻辑删除,则优先考虑的高可用性,性能比较高,但是数据同步这块做不到强一致。

原视频链接:https://www.bilibili.com/video/BV1yT411H7YK/?share_source=copy_web&vd_source=a11a8239173c7ecc0df19a35b38b8679

标签:03,缓存,设置,过期,击穿,redis,并发,key
From: https://www.cnblogs.com/daytoy105/p/17972744

相关文章

  • 这才是你应该了解的Redis数据结构!
    深入了解Redis数据结构Redis,作为一种高性能的内存数据库,支持多种数据结构,从简单的字符串到复杂的哈希表。在这篇博文中,我们将深入探讨Redis的一些主要数据结构,并通过详细的例子展示它们的使用。1.字符串(String)1.1存储和获取Redis中的字符串是二进制安全的,可以存储任何数......
  • Redis篇-redis使用场景-缓存-缓存穿透-02
    问题一:项目中哪些场景使用了redis呢?1缓存穿透缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库。1.1解决方案一方案一:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存;{key:1,value:null}优点:简单;缺点:消耗内存,可能会发......
  • openEuler欧拉部署Redis
    一、系统优化关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld关闭selinuxsed-ri's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/configsetenforce0二、安装Redisdnf-yinstallredisvim/etc/redis.conf#bind127.0.0.1bind0.0.0.0protected-mo......
  • redis实战 pdf 下载
    《redis实战》深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了Redis的用法。除此之外,书中还讲述了Redis的优化方法以及扩展方法,是一本对于学习和使用Redis来说不可多得的参考书籍。《redis实战》一共由三个部分组成。部分对Redis进行了介绍,说明了Redis的基本使用......
  • 【算法】【线性表】【链表】LRU 缓存
    1 题目请你设计并实现一个满足  LRU(最近最少使用)缓存 约束的数据结构。实现 LRUCache 类:LRUCache(intcapacity) 以 正整数 作为容量 capacity 初始化LRU缓存intget(intkey) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。voidput......
  • 2-STM32F103+EC800K(移远4G Cat1)远程升级篇(自建物联网平台)-STM32通过EC800K使用htt
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC800K/myota.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明前......
  • Redis篇-redis开篇-01
     注:红色列举出来的为重点部分。即缓存、分布式锁、集群。 原视频链接:https://www.bilibili.com/video/BV1yT411H7YK/?share_source=copy_web&vd_source=a11a8239173c7ecc0df19a35b38b8679......
  • 再见了RDM,Redis官方GUI才是最好的!
    1简介直观高效的RedisGUI管理工具,它可以对Redis的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用CLI和连接的Redis进行交互(RedisInsight内置对Redis模块支持),官方下载地址。使用Redis或RedisStack进行开发时,将您的生产力提升到一个新的水......
  • PBK's sum of LCM
    \[\sum\limits_{i=1}^N\sum\limits_{j=1}^M\frac{a_ia_j}{\gcd(a_i,a_j)}\]\[\sum\limits_{d=1}^\infty\frac1d\sum\limits_{i=1}^N\sum\limits_{j=1}^Ma_ia_j[\gcd(a_i,a_j)=d]\]\[\sum\limits_{d=1}^\infty\frac1d\sum\limits_{i=1}^Na_i\......
  • NVIDIA中的cupti的作用及设置: CUDA profiling tools interface —— Could not load
    NVIDIA官方给出的说明:可以知道,这个组件的作用是对NVIDIA的CUDA进程进行性能分析的,通过对这个组件的调用可以实现对CUDA进程的性能监测。在使用深度学习框架时有时需要对运行的代码的CUDA部分进行性能分析,于是就会调用该库的接口,有时会报错:Couldnotloaddynamiclibrary......