首页 > 数据库 >redis系列02---缓存过期、穿透、击穿、雪崩

redis系列02---缓存过期、穿透、击穿、雪崩

时间:2024-04-26 11:59:50浏览次数:25  
标签:02 缓存 删除 过期 redis --- 访问 键值 设置

一、缓存过期

问题产生的原由:

内存空间有限,给缓存设置过期时间,但有些键值运气比较好,每次都没有被我的随机算法选中,每次都能幸免于难,这可不行,这些长时间过期的数据一直霸占着不少的内存空间!

解决方案:

redis提供8种策略供应用程序选择,用于我遇到内存不足时该如何决策:

* noeviction:返回错误,不会删除任何键值
* allkeys-lru:使用LRU算法删除最近最少使用的键值
* volatile-lru:使用LRU算法从设置了过期时间的键集合中删除最近最少使用的键值
* allkeys-random:从所有key随机删除
* volatile-random:从设置了过期时间的键的集合中随机删除
* volatile-ttl:从设置了过期时间的键中删除剩余时间最短的键
* volatile-lfu:从配置了过期时间的键中删除使用频率最少的键
* allkeys-lfu:从所有键中删除使用频率最少的键

有了上面几套组合拳,我再也不用担心过期数据多了把空间撑满的问题了~

二、缓存穿透

 问题产生的原由:

比喻黑客攻击网站时,数据库中没有id为10的数据,而它请求总是要访问这一条不存在的数据,那此时缓存中没有,就会一直访问数据

 

解决方法:

1、对空值缓存:如果返回的结果是null,也将期缓存,并设置很小的过期时间,不超过5分钟;

2、设置可以访问的白名单:用bitmaps定义一个可以访问的白名单,id作为标识,每次访问都对期比较,如果不存在就不让访问;

3、布隆过滤器:从超大的数据集中快速告诉你查找的数据存不存在(悄悄告诉你,我的这位朋友有一点不靠谱,它告诉你存在的话不能全信,其实有可能是不存在的,不过它他要是告诉你不存在的话,那就一定不存在),实际上是二进制向量和一哈希函数。

 

 

 

三、缓存击穿

 问题产生的原由:缓存的某个热点数据过期了(不是大量过期),正好此时有大量的请求要访问该热点数据,全都打到了数据库上,服务器的压力增大,叫作缓存击穿

 解决方案:

设置热点数据永不过期

四、缓存雪崩

 问题产生的原由:在极短的时间内,出现了大量的缓存失效,所有的请求都打到数据库上

 解决方案:

 把键值的过期时间设置随机,还设置了热点数据永不过期

标签:02,缓存,删除,过期,redis,---,访问,键值,设置
From: https://www.cnblogs.com/zhengwei-cq/p/18159511

相关文章

  • 1、oracle数据库-导入导出
    Oracle数据库的导入导出主要有三种方式:使用pl、sql开发工具导入导出dmp文件方式:这是最常用的导入导出方式,生成的dmp文件是二进制的,可以跨平台操作,并且包含权限信息,也支持大字段数据,使用最广泛。在导出语法中,可以通过指定“full=y”和“ignore=y”参数来进行整个数据库的......
  • Redis分布式锁
    Redis分布式锁如何实现?在Redis中提供了一个命令setnx(SETifnotexists)由于Redis的单线程的,用了命令之后,只能有一个客户端对某一个key设置值,在没有过期或删除key的时候是其他客户端是不能设置这个key的。如何控制Redis实现分布式锁有效时长呢?Redis的setnx指令不好控制这个......
  • openGauss ALTER-TABLE语句
    ALTERTABLE语句修改表,包括修改表的定义、重命名表、重命名表中指定的列、重命名表的约束、设置表的所属模式、添加/更新多个列、打开/关闭行访问控制开关。语法格式在一张已经存在的表上添加列。ALTERTABLEtable_nameADDcolumn_namedata_type;在一张已经存在......
  • JavaScript---FileReader、Blob、File对象
    ArrayBuffer对象,Blob对象ArrayBuffer对象ArrayBuffer对象表示一段二进制数据,用来模拟内存里面的数据。通过这个对象,JavaScript可以读写二进制数据。这个对象可以看作内存数据的表达。这个对象是ES6才写入标准的,普通的网页编程用不到它,为了教程体系的完整,下面只提供一......
  • ABS10-ASEMI开关电源整流桥ABS10
    编辑:llABS10-ASEMI开关电源整流桥ABS10型号:ABS10品牌:ASEMI封装:ABS-4正向电流(Id):1A反向耐压(VRRM):1000V正向浪涌电流:30A正向电压(VF):1.10V引脚数量:4芯片个数:4芯片尺寸:50MIL功率(Pd):小功率设备工作温度:-55°C~150°C类型:贴片整流桥、小功率整流桥ABS10整流桥描述:ASEMI品......
  • uniapp u-picker操作
    <textclass="font-28font-bold"><u-pickerv-model="date_show"mode="time":default-time='date_value':params="date_params"@confirm="date_confirm"></u-picker><......
  • 基于禅道restful接口的二次开发-获取token
    使用禅道的时候,可能会想用禅道的接口来做一些二次开发,比如获取缺陷情况、案例执行情况,做一些统计报表的展示。根据禅道开发文档中相关说明,在禅道开源版16.0+,专业版11.0+,企业版6.0+,旗舰版2.4+新增RESTful风格API,因此可以利用api来获取相关的数据访问地址:http://****/zentao/a......
  • openGauss TRUNCATE-TABLE语句
    TRUNCATETABLE语句清理表数据,TRUNCATETABLE用于删除表的数据,但不删除表结构。也可以用DROPTABLE删除表,但是这个命令会连表的结构一起删除,如果想插入数据,需要重新建立这张表。它和在目标表上进行无条件的DELETE有同样的效果,但由于TRUNCATE不做表扫描,因而快得多。在大表上操作......
  • P10371 「LAOI-4」石头 题解
    原题链接:P10371。首先我们设\(l_{i,0/1}\)表示\(i\)左边的第一,二个比\(a_i\)大的数的位置。\(r_{i,0/1}\)同理。考虑一个区间\([L,R]\)在什么时候满足条件,设\(p,q\)分别为区间中最大/次大值的位置,我们分三种情况讨论。情况一:\(L<p<R\)。考虑从\(L,R\)开......
  • openGauss ORDER-BY子句
    ORDERBY子句ORDERBY子句用于对SELECT语句检索得到的一列或者多列数据进行升序(ASC)或者降序(DESC)排列。语法格式SELECT{*|[column,...]}[FROMfrom_item[,...]][ORDERBY{expression[ASC|DESC]}];参数说明ORDERBY子句对SELECT语句检索得到的数据进......