Redis常见的15个【坑】,避坑指南

一、常见命令

1.1 过期时间意外丢失

原因:

SET命令如果不设置过期时间,那么Redis会自动【擦除】这个key的过期时间

1.2 DEL命令阻塞redis

  • key是String类型时,DEL时间复杂度是O(1)
  • key是List/Hash/Set/ZSet类型,DEL时间复杂度是O(M),M为元素数量

1.3 RANDOMKEY阻塞redis

RANDOMKEY命令会从redis中随机取出一个key,首先会检查这个key是否过期,如果已经过期,那么Redis会删除它,这个过程就是懒惰清理;

清理完之后,redis还要找出一个【不过期】的key,返回给客户端。

整个流程就是这样的:【在master执行RANDOMKEY】

  1. master 随机取出一个 key,判断是否已过期

  2. 如果 key 已过期,删除它,继续随机取 key

  3. 以此循环往复,直到找到一个不过期的 key,返回

如果有大量key已经过期,还没来得及清理,这个循环就卡住了,耗时都花费在了清理过期key+寻找不过期key上。

【slave执行RANDOMKEY】

slave是不会主动清理过期key的,当一个key要过期时,master会先清理删除它,然后向slave发送一个DEL命令,告知slave也需要删除这个key,以此达到主从库的数据一致性。

1.4 SETBIT导致redis OOM

在使用setbit时,需要注意offset的大小,操作过大的offset也会引发redis的卡顿

1.5 MONITOR导致redis OOM

当执行monitor命令时,redis会把每条命令写到客户端的【输出缓冲区】中,然后客户端从这个缓冲区读取

  • 38
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值