12 redis大key问题

vvEcho 2024-02-01 20:46:59
Categories: Tags:

大key可能存在的场景

  1. 配送范围特别大的门店
  2. 促销活动特别多的门店、商家等
  3. 高频用户下的订单列表

大key会导致什么问题

  1. 如果是string类型的大key,由于redis是单线程运行的,大key会导致性能下降,甚至阻塞服务
  2. 如果是hash,list,set,zset等类型key 删除key会严重阻塞redis进程;其中删除的时间复杂度是O(n),就是集合中元素的个数;单个耗时过大命令,将会导致阻塞其他命令,容易引起应用程序雪崩或Redis集群发生故障切换;并且大可能会导致集群数据倾斜

如何解决大key问题

  1. 拆分多个key,然后mget,并且key还可以分散到不同节点,这样就可以把流量分摊到不同节点
  2. 也可以把大key拆到hash中,用hget去获取值

如何查找大key

可以使用redis-cli -bigkeys

如何删除大key

大key不能直接删除,需用scan命令迭代大key分批删除
redis4.0后引入了unlink命令,它能对删除操作进行懒出来操作,丢给后台线程来异步回收内存

大key的最佳实践

string类型大小控制到10k以内,hash,list,set,zset元素个数不要超过5000