深入了解redis


什么是redis

redis是使用C语言编写的,是一个非关系型的键值对数据库,数据存储在内存中,所以读写速度非常快,常被用于缓存。

常用应用场景: 缓存、计数器、排行榜等

redis的基本数据类型

在这里插入图片描述

缓存穿透、缓存雪崩、缓存击穿

缓存穿透

查询缓存和数据库中不存在的某个值时,一般情况下,如果底层数据库不存在对应的数据,则不会写入到缓存,就会导致每次对这个值的查询请求都会在数据库进行。

解决方法
1、如果是非法请求,在api入口处,对参数进行校验,过滤非法值
2、当查询不到相对应的数据时,设置空值或默认值,失效时间不宜过长
3、当缓存中不存在某个数据时,使用布隆过滤器判断数据是否存在,如果存在才继续往下查询

缓存雪崩

当大量缓存使用相同的失效时间,就会导致缓存在同一时间内同时失效,然后所有请求全部转发到数据库,导致数据库压力增加。

解决方法
1、失效时间使用随机数,让key均匀失效
2、使用双key,主key设置失效时间,备key不设置时间,当主key失效时,返回备key值
3、当不是核心数据时,进行api接口限流

缓存击穿

缓存击穿和缓存雪崩很类似,只不过是缓存击穿是一个key失效,而缓存雪崩是大量key失效

解决方法
1、热点数据不设置过期时间,后台异步更新缓存,适用于不严格要求缓存一致性的场景
2、在value内部设置一个比缓存失效时间短的时间标识,当异步发现该值快过期时,延长失效时间并且重新同步数据库数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值