综合来说,就是会显著影响性能,降低redis吞吐量。
客户端超时阻塞 —— 由于 Redis 执行命令是单线程处理,然后在操作大 key 时会比较耗时,那么就会 阻塞 Redis,从客户端这一视角看,就是很久很久都没有响应。
引发网络阻塞 —— 每次获取大 key 产生的网络流量较大,如果一个 key 的大小是 1 MB,每秒访问量 为 1000,那么每秒会产生 1000MB 的流量,这对于普通千兆网卡的服务器来说是灾难性的。
阻塞工作线程 —— 如果使用 del 删除大 key 时,会阻塞工作线程,这样就没办法处理后续的命令。
应对方案
bigKey本质是个业务问题,业务使用不当导致的,可以通过bigkey命令或者Scan命令在从库上排查扫描bigkey,然后通过统一前缀识别业务模块,推动对应研发人员业务整改。
redis服务器上的bigkey则需要分批删除。
对于bigkey无法避免的情况,可以采用本地缓存和多级缓存技术解决。