使用Redis来做缓存,你应该知道的!

一、缓存一些知识1.1、缓存击穿、缓存穿透、缓存雪崩是什么?缓存击穿用户请求的某个key在DB或者缓存中存在,但是可能正好在当这个key在缓存中到达了失效时间而过期,而此时大量访问该数据请求过来,相当于在缓存中凿开一个缺口,一下子全部打在DB上,造成DB压力压垮DB。缓存穿透用户通过请求一些缓存和DB中压根都不存在的数据,致使每次请求都会绕过缓存,请求DB,给DB带来压力缓存雪崩当缓存服务器重启或者大量缓存的keys过期失效,导致客户端过来的请求全部直接请求到DB中,造成DB压
摘要由CSDN通过智能技术生成

一、缓存一些知识

1.1、缓存击穿、缓存穿透、缓存雪崩是什么?

  • 缓存击穿

用户请求的某个key在DB或者缓存中存在,但是可能正好在当这个key在缓存中到达了失效时间而过期,而此时大量访问该数据请求过来,相当于在缓存中凿开一个缺口,一下子全部打在DB上,造成DB压力压垮DB。

image.png

  • 缓存穿透

用户通过请求一些缓存和DB中压根都不存在的数据,致使每次请求都会绕过缓存,请求DB,给DB带来压力

image.png

  • 缓存雪崩

当缓存服务器重启或者大量缓存的keys过期失效,导致客户端过来的请求全部直接请求到DB中,造成DB压力大而崩溃(注意这里和缓存击穿不同的是缓存击穿是单个key失效引起,而雪崩是大量key失效

image.png

1.2 应对缓存击穿

  • 1)互斥锁访问数据

针对某一热点数据,在获取时可通过加互斥锁使得只有一个请求进行处理访问DB,并将数据放置到缓存中,后续阻塞的请求将直接命中缓存。

  • 2)设置热点数据永不过期

1.3 应对缓存穿透

  • 加强接口入参校验。将不合法入参抹杀在摇篮中
  • 如果未查出数据,可赋予缓存中对应key一个null值,并设置一个过期时间,防止单位时间内大量请求访问DB。因为设置了过期时间,所以可以保证后续该key有值了,可以获取到。

1.4 应对缓存雪崩

  • 1)设置缓存过期时间时,加上随机时间戳

这样做的好处就是尽量使得缓存key们的过期时间均匀分散,不至于在同一个时间点大面积缓存过期失效引起雪崩

  • 2)不设置缓存过期时间

  • 3)分布式缓存服务器部署的情况下,可以将热点数据分散在不同的缓存服务器中

二、redisLRU缓存机制

2.1 Redis内存淘汰机制

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。 ----- 摘自百度百科

LRU缓存那就是将最近最少访问的缓存剔除。redis针对LRU机制提供了实现支持。redis在redis.conf中提供了配置选项maxmemory 来配置执行大小的内存数据集。或者在服务器运行时,可在客户端通过CONFIG SET进行设置。

maxmemory 100mb

如果设置为0,那么则表示内存不受限制。当往redis中存放值时,达到我们指定的maxmemory值时,redis提供了多种不同的剔除值策略。可以通过在redis.conf中配置策略

noeviction xxx
  • noeviction(de
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值