一、缓存过期

问题产生的原由:

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

解决方案:

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

三、缓存击穿

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

解决方案:

设置热点数据永不过期

四、缓存雪崩

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

解决方案:

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

redis系列02---缓存过期、穿透、击穿、雪崩的更多相关文章

  1. NoSQL & Redis 介绍、缓存穿透 & 击穿 & 雪崩

    1. NoSql 简介 2. Redis 简介 2.1 Redis 的起源 2.2 缓存过期 & 缓存淘汰 3. 缓存异常 1)缓存穿透 2)缓存击穿 3)缓存雪崩 4)总结 1. NoSQL ...

  2. Redis系列(八)--缓存穿透、雪崩、更新策略

    1.缓存更新策略 1.LRU/LFU/FIFO算法剔除:例如maxmemory-policy 2.超时剔除,过期时间expire,对于一些用户可以容忍延时更新的数据,例如文章简介内容改了几个字 3.主 ...

  3. REDIS 缓存的穿透,雪崩和热点key

    穿透 穿透:频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层.从而失去缓存的意义. 解决办法:①用一个bitmap和n个hash函数做布隆过滤器过滤没有在缓存的键.   ②持久层查询不到就 ...

  4. 《Redis - 穿透/击穿/雪崩/集中失效》

    一:什么是缓存穿透? - 定义 - 正常情况下,我们在理想的条件下去查询缓存数据都是存在的. - 那么请求去查询一条数据库中不存在的数据,也就是缓存和数据库都查询不到这条数据. - 所以请求每次都会打 ...

  5. Redis-缓存穿透/击穿/雪崩

    1. 简介 如图所示,一个正常的请求 客户端请求张铁牛的博客. 服务首先会请求redis,查看请求的内容是否存在. redis将请求结果返回给服务,如果返回的结果有数据则执行7:如果没有数据则会继续往 ...

  6. spring boot整合redis,以及设置缓存过期时间

    spring-boot 整合 redis 注:redis服务器要先开启 pom文件: <dependency> <groupId>org.springframework.boo ...

  7. Redis系列三 - 缓存雪崩、击穿、穿透

    前言 从学校出来,做开发工作也有一定时间了,最近有想系统地进一步深入学习,但发现基础知识不够扎实,故此来回顾基础知识,进一步巩固.加深印象. 最初开始接触编程时,总是自己跌跌撞撞.不断摸索地去学习,再 ...

  8. Redis中几个简单的概念:缓存穿透/击穿/雪崩,别再被吓唬了

    Redis中几个“看似”高大上的概念,经常有人提到,某些好事者喜欢死扣概念,实战没多少,嘴巴里冒出来的全是高大上的名词,个人一向鄙视概念党,呵呵! 其实这几个概念:缓存穿透/缓存击穿/缓存雪崩,有一个 ...

  9. Redis 穿透 & 击穿 & 雪崩

    原文:https://www.cnblogs.com/binghe001/p/13661381.html 缓存穿透 如果在请求数据时,在缓存层和数据库层都没有找到符合条件的数据,也就是说,在缓存层和数 ...

  10. redis整理:常用命令,雪崩击穿穿透原因及方案,分布式锁实现思路,分布式锁redission(更新中)

    redis个人整理笔记 reids常见数据结构 基本类型 String: 普通key-value Hash: 类似hashMap List: 双向链表 Set: 不可重复 SortedSet: 不可重 ...

随机推荐

  1. .NET Emit 入门教程:第三部分:构建模块(Module)

    前言: 在这一部分中,我们将深入讨论动态程序集中模块的概念以及如何构建和管理模块. 1.模块的概念: 模块是动态程序集中的基本单位,它类似于一个独立的代码单元,可以包含类型.方法.字段等成员. 在动态 ...

  2. 使用SpringBatch读取csv文件

    目录 1.需求 2.解决方案 3.注意事项 1.文件路径的获取 2.各个Step如果获取到ExecutionContext中的值 3.FlatFileItemReader使用注意 4.实现步骤 1.导 ...

  3. 探寻UUID的起源与奥秘:从时间戳到唯一标识

    1. UUID起源与原理 UUID(Universally Unique Identifier)是一种唯一标识符,最初由Apollo计算机公司的软件工程师Roedy Green在1987年提出.其原理 ...

  4. hacker守则

    hacker守则 永远不要相信用户的输入,任何输入数据在证明其无害之前,都是有害的 不在任何场景下谈论hacker 学习时,养成做笔记的好习惯 不谈论所有与hack相关的文章/ 电脑 / 电脑不要说 ...

  5. nodejs下载 安装 配置环境

    1.下载 下载地址:https://nodejs.org/en/download/ 下载完成后,双击安装包,开始安装,一直点next即可.我把安装路径设置为 D:\Program Files\node ...

  6. Java解析json数据(fastjson2)

    Json数据 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它以易于阅读和编写的方式来表示结构化数据,常用于在不同系统之间进行数据交互和传输. JSON使 ...

  7. Access文件清理占用内存

    1.用access打开access.accdb文件 2.找到数据库工具的压缩和修复数据库,单击就行 3.数据库文件成功便成500K内存占用

  8. Avalonia的UI组件

    Avalonia是一个强大的跨平台UI框架,允许开发者构建丰富的桌面应用程序. 它提供了众多UI组件.灵活的布局系统.可定制的样式以及事件处理机制. 在这篇博客中,我们将详细解析Avalonia的UI ...

  9. 【直播回顾】OpenHarmony知识赋能第五期第二课——如何成为社区贡献达人

    4月28日晚上19点,知识赋能第五期第二节课<如何成为OpenHarmony社区贡献达人?>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由华为社区运营专家祝尚元主讲 ...

  10. Jchardet——支持检测并输出文件编码方式的组件

      简介 Jchardet是OpenAtom OpenHarmony(以下简称"OpenHarmony")系统的一款检测文本编码的组件.当上传一个文件时,组件可以检测并输出该文件中 ...