摘要
redis bigkey即数据量大的key,比如字符串value值非常大,哈希、列表、集合、有序集合元素非常多等。由于其数据大小远大于其他key,容易造成内存不均、超时阻塞、网络流量拥塞等一系列问题
危害
内存不均
导致集群内不同节点内存分配不均(redis-cluster分配最小粒度是slot,每个slot中含有多个key),间接到孩子访问请求倾斜,同时不利于集群统一管理,存在丢失数据的隐患
超时阻塞
由于redis单线程模型,在操作bigkey时很容易出现阻塞甚至导致sentinel主从切换。常见操作包括smembers
、hgetall
、del
或自动过期bigkey,一般都会出现在redis慢查询日志中
网络流量拥塞
如果bigkey正好又是hotkey,则很容易产生流量拥塞问题,比如bigkey为1MB,每秒访问几千次,对于普通千M网卡(最大128MB/s)服务器来说是灭顶之灾,即便对于万兆网卡服务器来说也是很大压力
如何发现bigkey
redis-cli —bigkeys
redis-cli --bigkeys
会对redis中的key进行scan
采样,寻找较大的keys,不用担心阻塞
|
|
如何避免bigkey
主要是对bigke拆分,拆为多个key,然后mget取回来,再在业务层做合并