使用redis的时候,需要注意哪些事情?

提问者:帅平 问题分类:面试刷题
使用redis的时候,需要注意哪些事情?
13 个回答
旧梦难醒
旧梦难醒
如果满足如下的情况:
Redis 使用的是 4.0 以下版本
slave 配置项为 read-only=no(从库可写)
向 slave 写入了有过期时间的 key

此时会造成slave发生内存泄漏,即使key到了过期时间,也不会自动清理。这是一个bug,需要升级到4.0以上的版本。
发布于:2个月前 (04-02) IP属地:四川省
幸福搭配甜蜜
幸福搭配甜蜜
不管哪个版本,其实我们把slave强制为read-only,就不会发生slave的内存泄漏了。
发布于:2个月前 (04-02) IP属地:四川省
一生的爱意
一生的爱意
使用master slave的时候由于maxmemory不同,会造成淘汰策略的生效,因此会造成master和slave数据量不一致的情况。所以尽量使用redis5.0及以上,5.0版本新增了replica-ignore-maxmemory=yes。此时slave 内存超过了 maxmemory,也不会自行淘汰数据了!
发布于:2个月前 (04-02) IP属地:四川省
与酒
与酒
使用redis3.2以下版本的时候,如果redis是主从复制架构,那么key如果过期了还没有被master清理,那么在slave上也不会被清理,永远会返回value
发布于:2个月前 (04-02) IP属地:四川省
你我这辈子最的依靠
你我这辈子最的依靠
Redis 后台线程在执行 AOF page cache 刷盘(fysnc)时,如果此时磁盘 IO 负载过高,那么调用 fsync 就会被阻塞住。
发布于:2个月前 (04-02) IP属地:四川省
兮和
兮和
使用monitor命令(当你在执行 MONITOR 命令时,Redis 会把每一条命令写到客户端的「输出缓冲区」中,然后客户端从这个缓冲区读取服务端返回的结果。)的时候,如果qps很高,那么也会触发redis的OOM。
发布于:2个月前 (04-02) IP属地:四川省
我怕时间不够
我怕时间不够
使用setbit的时候,如果offset非常大,那么redis需要分配更大的内存空间,容易造成OOM
发布于:2个月前 (04-02) IP属地:四川省
影子爱人
影子爱人
使用Randomkey命令随机获取redis的某个key的时候也可能出现阻塞的情况,主要是因为redis过期是定时清理+惰性删除。使用RANDOMKEY会触发这个操作,可能会涉及到频繁获取-判断-获取-判断的过程。
发布于:2个月前 (04-02) IP属地:四川省
冷心丿玫瑰
冷心丿玫瑰
如果数据类型不是String类型的话,使用DEL命令会造成redis的阻塞,因为Redis在Del非String类型的时候需要依次释放每个元素的内存,元素越多,这个过程就会越耗时。为了避免这个情况,在Del非String类型的时候,需要进行如下操作:
1、查询元素数量:执行 LLEN/HLEN/SCARD/ZCARD 命令
2、判断元素数量:如果元素数量较少,可直接执行 DEL 删除,否则分批删除
3、分批删除:执行 LRANGE/HSCAN/SSCAN/ZSCAN + LPOP/RPOP/HDEL/SREM/ZREM 删除
发布于:2个月前 (04-02) IP属地:四川省
艺兴一意
艺兴一意
Redis 4.0 不是推出了 lazy-free 机制么?打开这个机制,释放内存的操作会放到后台线程中执行,那是不是就不会阻塞主线程了?
发布于:2个月前 (04-02) IP属地:四川省
青山依旧
青山依旧
Redis 4.0 不是推出了 lazy-free 机制么?打开这个机制,释放内存的操作会放到后台线程中执行,那是不是就不会阻塞主线程了?
即使 Redis 打开了 lazy-free,在删除一个 String 类型的 bigkey 时,它仍旧是在主线程中处理,而不是放到后台线程中执行。所以,依旧有阻塞 Redis 的风险!
发布于:2个月前 (04-02) IP属地:四川省
丶殇
丶殇
如果第一次set key对应某个值,并且设置了过期时间的话,然后第二次继续set这个key的时候,没有带过期时间,那么这个key将不会再带有过期时间,而是永久保存,也就是过期时间被擦除了。
发布于:2个月前 (04-02) IP属地:四川省
我来回答