Redis?BigKey的問題解決
什么是BigKey?
BigKey指的是redis中一些key value值很大,這些key在序列化與反序列化過程中花費(fèi)的時(shí)間很大! 操作bigkey的通常比較耗時(shí),也就意味著阻塞Redis可能性越大!占用的流量同時(shí)也會(huì)變得很大!
大白話就是bigkey實(shí)際指一個(gè)key對應(yīng)的value很大,占用的空間很大!
string長度大于10K,list長度大于10240認(rèn)為是big bigkeys
如何查看Redis中的bigKey?
我們以String為例:
先存儲(chǔ)幾個(gè)String key進(jìn)去,然后使用命令!
查看所有BigKey
redis-cli自帶的一個(gè)命令(不需要連接Redis)
。對整個(gè)redis進(jìn)行掃描,尋找較大的key。
redis-cli -h 127.0.0.1 -p 6379 --bigkeys
Redis中有3個(gè)String , 可以看到發(fā)現(xiàn)一個(gè)BigKey key3
獲取key3
的值 看看
該命令使用scan方式對key進(jìn)行統(tǒng)計(jì),所以使用時(shí)無需擔(dān)心對redis造成阻塞。
輸出大概分為兩部分,summary之上的部分,只是顯示了掃描的過程。
- summary部分給出了每種數(shù)據(jù)結(jié)構(gòu)中最大的Key。
- 統(tǒng)計(jì)出的最大key只有string類型是以字節(jié)長度為衡量標(biāo)準(zhǔn)的。
- list,set,zset等都是以元素個(gè)數(shù)作為衡量標(biāo)準(zhǔn),不能說明其占的內(nèi)存就一定多。所以,
如果你的Key主要以string類型存在
,這種方法就比較適合。
我的hash中
key3值
這種是查看所有的key 是否是bigKey
查看單個(gè)Key
debug object
其中serializedlength表示key對應(yīng)的value序列化之后的字節(jié)數(shù)
注意
:
debug object bigkey本身可能就會(huì)比較慢,它本身就會(huì)存在阻塞Redis的可能,可能會(huì)比較危險(xiǎn)、而且不太準(zhǔn)確(序列化后的長度);
memory usage
Redis 4.0開始提供memory usage命令可以計(jì)算每個(gè)鍵值的字節(jié)數(shù)
如何優(yōu)化
優(yōu)化big key的原則就是string減少字符串長度,list、hash、set、zset等減少成員數(shù);
string長度大于10K,list長度大于10240認(rèn)為是big bigkeys
1 拆分
如果對象是整存爭取
將對象拆分后才能多個(gè)小key-value,get不同的key或者批量獲取stringRedisTemplate.opsForValue() .multiGet(keyList)
如果對象是部分更新獲取數(shù)據(jù)
可以分拆成幾個(gè)key-value,也可以存儲(chǔ)在hash中,部分更新部分存取!
如果是hash ,set,zset ,list 等元素
固定一個(gè)桶的數(shù)量,比如1000,每次存取的時(shí)候,先在本地計(jì)算field的hash值,模除1000,確定該field落在哪個(gè)key上。
newHashKey = hashKey + (hash(field) % 1000);
hset(newHashKey, field, value);
hget(newHashKey, field)
set, zset, list 也可以類似上述做法!
2 本地緩存
減少訪問redis次數(shù),降低危害減少訪問redis次數(shù),降低危害! 當(dāng)然本地開銷也會(huì)變大!
到此這篇關(guān)于Redis BigKey的問題解決的文章就介紹到這了,更多相關(guān)Redis BigKey內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
redis由于目標(biāo)計(jì)算機(jī)積極拒絕,無法連接的解決
這篇文章主要介紹了redis由于目標(biāo)計(jì)算機(jī)積極拒絕,無法連接的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Redis存儲(chǔ)斷點(diǎn)續(xù)傳文件狀態(tài)的最佳實(shí)踐
在斷點(diǎn)續(xù)傳系統(tǒng)中,如何高效地存儲(chǔ)和更新文件上傳狀態(tài)是關(guān)鍵,得益于 Redis 高效的內(nèi)存操作和多種數(shù)據(jù)結(jié)構(gòu)的支持,它非常適合用于存儲(chǔ)上傳過程中的臨時(shí)狀態(tài)信息,下面,我們將探討如何利用 Redis 實(shí)現(xiàn)文件上傳狀態(tài)的存儲(chǔ),需要的朋友可以參考下2024-12-12gem install redis報(bào)錯(cuò)的解決方案
今天小編就為大家分享一篇關(guān)于gem install redis報(bào)錯(cuò)的解決方案,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01