Redis笔记之---redis常见问题

目录

一、key的生存时间

二、Redis的淘汰机制

三、redis 缓存常见问题

缓存穿透

缓存击穿

缓存雪崩

缓存倾斜


一、key的生存时间

Key生存时间到了,Redis是否会立即删除?

不会立即删除。

  • 定期删除:Redis每隔一段时间就会去查看Redis设置了过期时间的key,会在100ms的间隔中默认查看3个key。

  • 惰性删除:如果当你去查询一个已经过了生存时间的key时,Redis会先查看当前key的生存时间,是否已经到期,到期则直接删除当前key,并且给用户返回一个空值。

二、Redis的淘汰机制

当redis内存不足时,再继续往redis中添加数据,这时会根据设置的规则触发淘汰机制。淘汰机制主要有以下几种:

  • volatile-lru:在内存不足时,Redis会在设置过了生存时间的key中干掉一个最近最少使用的key。

  • allkeys-lru:在内存不足时,Redis会在全部的key中干掉一个最近最少使用的key。


  • volatile-lfu:在内存不足时,Redis会在设置过了生存时间的key中干掉一个最近最少频次使用的key。

  • allkeys-lfu:在内存不足时,Redis会在全部的key中干掉一个最近最少频次使用的key。


  • volatile-random:在内存不足时,Redis会在设置过了生存时间的key中随机干掉一个。

  • allkeys-random:在内存不足时,Redis会在全部的key中随机干掉一个。

  • volatile-ttl:在内存不足时,Redis会在设置过了生存时间的key中干掉一个剩余生存时间最少的key。

 


  • noeviction:(redis默认的淘汰机制)在内存不足时,直接报错。

指定淘汰机制的方式:maxmemory-policy 具体策略,设置Redis的最大内存:maxmemory 字节大小

LRU,即:最近最少使用淘汰算法(Least Recently Used)。LRU是淘汰最长时间没有被使用的。

LFU,即:最不经常使用淘汰算法(Least Frequently Used)。LFU是淘汰一段时间内,使用次数最少的。

random,随机淘汰算法

三、redis 缓存常见问题

缓存穿透:

什么是缓存穿透?

缓存穿透就是当用户需要查询的数据,redis缓存中不存在,并且我们的数据库中也不存在。当查询redis中没有的数据时,每次请求都会进到数据库,这样就造成了缓存穿透。

如何避免?

1.当发现有用户查询的数据redis中没有,数据库中也没有时,对用户的ip进行限制

2.如果是通过整型的自增主键去查找,那么可以将数据库表中id的最大值存到redis中,用户每次访问都去redis中比较一下id

3.如果主键为非整型,那么可以将所有的主键存到redis的set集合中,用户每次访问都去redis中查询主键是否存在

 缓存击穿:

什么是缓存击穿?

缓存击穿就是redis中缓存的热点数据突然到期,这时大量的用户都会去访问数据库,严重可能导致数据库宕机

 如何避免?

1.在访问redis中没有数据时,对用户进行限流(加锁)。避免大量请求访问数据库

2.也可以将热点数据的生存时间去掉

 缓存雪崩:

什么是缓存雪崩?

缓存雪崩就是redis中大量的热点数据同时到期,大量的用户都会去访问数据库,严重可能导致数据库宕机

 如何避免?

可以给热点数据设置一个随机的生存时间(可以使30~60之间),避免大量数据同时到期

缓存倾斜:

什么是缓存倾斜?

缓存倾斜就是一台redis中热点数据过多,导致redis压力过大而宕机,同样的这时会又去到数据库

如何避免?

 可以搭建redis的主从架构、配置多个从节点来分担压力

 如有错误,请指正。。。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
redis-benchmark是官方自带的Redis性能测试工具,用来测试Redis在当前环境下的读写性能。它提供了很多选项来帮助开发和运维人员测试Redis的相关性能。比如,可以通过-c选项指定并发连接数,通过-n选项指定请求数量,通过-d选项指定SET/GET值的数据大小等。常见的使用方式是进入Redis的bin目录,执行redis-benchmark命令并传入相应的参数。例如,可以使用-t选项指定需要测试的命令类型,通过-n选项设置请求数量。比如执行以下命令:./redis-benchmark -t set,get -n 100000,表示进行SET和GET命令的性能测试,总共执行100000个请求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记redis-benchmark详解](https://blog.csdn.net/aiguoba/article/details/106517328)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis压力测试——redis-benchmark](https://blog.csdn.net/yizhan_csdn/article/details/120546366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JokerQGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值