Redis

Redis有什么用?


​ 今天的程序员在设计软件时,一定会遇到一个问题:如何减少数据库的用户请求数量?大量的用户请求不仅会拖慢服务器的速度,严重的甚至会瘫痪数据库,特别是在大型购物网上,服务器经常会面临成千上万个请求。

在这里插入图片描述

而有统计表明,用户请求中有很大一部分都是需要数据库进行读操作,因此,数据库经常要耗费大量时间去进行硬盘的读写,而这无疑大大拖慢了整个软件的效率。因此,为了解决这个问题,Redis诞生了。

​ Redis的设计灵感来自于cpu的cache,和数据库相似,早期的cpu也要进行大量的内存读写操作,而这些读写操作对cpu来说是十分漫长的。而cpu解决这个问题的办法是在cpu与内存之间再加一层存储介质——cache,以后当cpu再去读取数据时就去cache中读取,而不再访问内存,因为cpu访问cache的速度要远远快于访问内存,因此大大加快了cpu的处理效率。同样的,当软件工程师们面临数据库频繁的硬盘读写问题时,他们采取了与cpu相似的做法,在用户与数据库间再加一层存储介质——redis。这样做的目的是当用户发出读请求时,不直接访问数据库,而是先去redis中查找有没有自己需要的数据,而根据二八定律,只需要把20%的热点数据在redis中存储,便可完成大多数的用户查询操作,因此,经过redis的过滤,真正需要数据库去进行硬盘读写的用户请求数量大大减少,数据库的效率顺利成章的提高了。

在这里插入图片描述

但是和cache不同的是,redis不是一个独立的寄存器,它本质上还是使用了内存进行储存,因此不可能让redis无限制的存储数据,需要进行数据的定期删除。而在数据删除上,redis一开始是使用了定期删除的方法,即每隔一段时间就随机挑选一些数据进行删除。

在这里插入图片描述

但是这样做也有一个问题,那就是可能会有一些数据的运气比较好,每次都逃过了redis的随机删除算法,长时间的在内存中驻留下去。因此为了解决这个问题,redis又添加了惰性删除策略,即当逃脱了随机删除的数据如果再次被查询时,redis会先去检查该数据有没有过期,如果过期了就会直接删除,这种方式由于是被动触发的,不查询就不会发生,所以叫惰性删除。但是即使如此还会有一些数据即逃脱了定期删除,又躲过了惰性删除,而最终,为了彻底解决过期数据把内存撑满的问题,redis放了个大招——内存淘汰策略,一共有八种策略供用户选择,基本涵盖了方方面面的情况。那么,有了这套组合拳,redis就高枕无忧了吗?答案是否定的。

在这里插入图片描述

缓存击穿

有时候用户会访问一些redis中不存在的数据,因为数据不存在,因此用户请求会穿过redis而被转发给数据库,因此数据库不得不又去进行硬盘的读写,而redis也没有发挥它的作用-过滤请求。这种情况一般发生在redis对热点数据的删除过后。

-在这里插入图片描述

缓存雪崩

缓存雪崩实际上是缓存击穿的究极体,如果redis一次删除了大量的热点数据,会导致之后大量的对这些数据的查询请求被转发给数据库,从而严重拖累整个系统的效率

在这里插入图片描述

因此,为了解决上述两个问题,redis设置了过期时间均匀分布j和热点数据永不过期,很大程度上缓解了这两个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值