什么是redis?

redis是一个非关系型数据库,相对于其他数据库而言,它的查询速度极快,且能承受的瞬时并发量非常的高。所以常常被用来存放网站的缓存,以减少主要数据库(如mysql)的服务器压力。

当我们要用redis作为缓存的时候, 有一些常见的经典问题我们就必须要有所考虑和防范。这里我主要介绍一下缓存穿透、缓存雪崩和缓存击穿的现象发生的原因和防范措施。

缓存穿透

当我们用redis作缓存时, 其初始目的是为了在我们访问某一个网页或者商品时将此次从数据库查询得到的数据存放到redis中,这样下次再次访问时就直接去redis中取数据,减小数据库的压力。但是如果说我们要查询的数据不在数据库中的时候我们自然就无法取到它,更别说存到redis中了。这样重点就来了, 有的黑客就利用这一点写一个脚本高并发量的发问这个不存在的数据,造成数据库的高频率的查询访问最终导致你的数据库崩溃。

那么如何去防范这个问题呢?

解决方案: 就是当有一个查询为空的请求过来, 我们也将这个请求查询的key存放到redis并设置空值, 这样再次访问时就不会去我们的数据库了, 我一般设置其过期时间较短,这样防止数据更新后无法同步到缓存。

缓存雪崩

缓存雪崩就是我们的缓存是在同一时间创建(如天猫双十一),然后设置的缓存时间是一置的, 这样到特定的时间就会出现缓存雪崩的情况, 此时若是有当访问量的操作就会造成数据库服务器的压力过大。

解决方案: 我就拿电商的项目来举例吧, 我们针对不同分类的商品设置的缓存过期时间不同,然后对统一分类的商品设置(一定范围内的)随机的过期时间,这样就十分巧妙地避免了缓存的集中消失过期,在做的时候尽量注意一些细节,比如说热门商品的缓存时间可以适当长一些,而冷门商品的过期时间短一些,这样可以尽量的减少缓存服务器的压力。

缓存击穿

缓存击穿就是假设我们有一件特别火爆的热门商品, 它每天都有大量的客户访问, 但是既然是缓存就有过期的那一刻,所以在缓存过期的那一刻, 大量的访问就落到了数据库的头上,这样就造成了我们的缓存击穿。(一般能达到这种情况的电商不多, 哈哈,防患于未然嘛)

解决方案:我们将主打商品就是大概率会成为爆款的商品缓存时间设置为永不过期,这样就不会造成数据库的压力了, 反言之就要牺牲缓存服务器的压力了。

以上就是我想要说的这三个问题。

什么是redis缓存穿透, 缓存雪崩, 缓存击穿的更多相关文章

  1. 缓存穿透、雪崩、热点与Redis

    (拼多多问:Redis雪崩解决办法) 导读:互联网系统中不可避免要大量用到缓存,在缓存的使用过程中,架构师需要注意哪些问题?本文以 Redis 为例,详细探讨了最关键的 3 个问题. 一.缓存穿透预防 ...

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

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

  3. Redis缓存穿透和雪崩

    缓存穿透 用户想要查询一个数据 在redis缓存数据库中没有获取到 就会向后端的数据库中查询. 当用户很多 都去访问后端数据库的话,这就会给数据库带来很大的压力. 常见场景:秒杀活动 等 解决方法: ...

  4. redis的穿透和雪崩

    穿透: 从缓存中查询一个数据,查到为空,需要每次都去数据库中查询.而从数据库中查询出来也为空,也就不写入缓存.导致一个不存在的数每次都去数据库中查询,造成db系统很大压力 造成缓存穿透 解决:如果从数 ...

  5. 深入了解Redis(7)-缓存穿透,雪崩,击穿

    redis作为一个内存数据库,在生产环境中使用会遇到许多问题,特别是像电商系统用来存储热点数据,容易出现缓存穿透,雪崩,击穿等问题.所以实际运用中需要做好前期处理工作. 一.缓存雪崩 1.概念 缓存雪 ...

  6. Redis总结(五)缓存雪崩和缓存穿透等问题

    前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhong/category/771056.html .今 ...

  7. Redis总结(五)缓存雪崩和缓存穿透等问题(转载)

    前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhong/category/771056.html .今 ...

  8. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  9. 什么是redis的缓存雪崩与缓存穿透

    今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题? 一.缓存雪崩 1.1 什么是缓存雪崩? 首先我们先来回答一下我们为什么要用缓 ...

  10. 【Redis】缓存穿透与缓存雪崩

    一.缓存雪崩 1.1 缓存雪崩产生的原因 1.2 解决方案 1.3 锁的方式 1.4 消息中间件 1.5 一级和二级缓存 1.6 均摊分配redis key 失效时间 二.缓存穿透 一.缓存雪崩 1. ...

随机推荐

  1. abp(net core)+easyui+efcore仓储系统——解决方案介绍(二)

    abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) ABP框架 首先介绍一下abp框架,abp其 ...

  2. android 开发-系统设置界面的实现

    具体与Preference的用法类似,这里就不做过多解释,直接贴示例代码,需要在res下新建xml文件夹,在xml文件夹下添加xml文件. xml:(注意:root节点是:PreferenceScre ...

  3. Aspose.cell生成表格

     public void ExportQueryPrj(HttpContext context)         {              //接受前端传递参数和数据             st ...

  4. 【心得】asp.net 异常:正在中止线程 引发的问题

    asp.net做的一个同步程序,同步的方法是通过JQuery的Ajax调用,同步过程所需要的时间大概有几个小时吧. 当在本机运行的时候,无论是debug模式还是release模式,都能正常运行. 发布 ...

  5. 动态页面技术----JSP技术

    1995年java诞生,没有jsp,只有Servlet, Servlet开发:Servlet上嵌套html代码,非常繁琐. 1998年,出现jsp,方便写html代码,并且可以在html代码中嵌套ja ...

  6. 移植MAVLINK到STM32详细教程之三

    在前面教程的基础上继续移植优化,之前的没有加缓冲区,没有接收函数功能,这里进行统一的讲解                            作者:恒久力行  qq:624668529 缓冲区对于接 ...

  7. 内置函数isNaN()

    NaN(not a number)的产生:算术运算返回一个未定义的或无法表示的值 1.NaN并不一定用于表示某些值超出表示范围的情况.将某些不能强制转换为数值的非数值转换为数值的时候,也会得到NaN. ...

  8. 【干货】JavaScript DOM编程艺术学习笔记1-3

    从7月29号到8月8号,断断续续地看完了这本书,做了部分实践联系.总体感觉本书真的只能算是个入门,学完之后看到库的那一章才感觉是个大坑,实践中大部分应该都是用的现成的库吧,所以还要重新学习一个库,但是 ...

  9. Tomcat8

    一.Apache Tomcat 8介绍 Tomcat 8.0.0-RC3 (alpha) Released                                                ...

  10. [转]Git之忽略文件(ignore file)

    原文链接:http://blog.csdn.net/benkaoya/article/details/7932370 .gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为 ...