Redis 內(nèi)存考慮

2018-08-03 11:13 更新
  1. 只要有可能的話,就盡量使用散列鍵而不是字符串鍵來(lái)儲(chǔ)存鍵值對(duì)數(shù)據(jù),因?yàn)樯⒘墟I管理方便、能夠避免鍵名沖突、并且還能夠節(jié)約內(nèi)存。具體實(shí)例: 節(jié)約內(nèi)存:Instagram的Redis實(shí)踐 blog.nosqlfan.com/html/3379.html
  2. 如果將redis作為cache進(jìn)行頻繁讀寫(xiě)和超時(shí)刪除等,此時(shí)應(yīng)該避免設(shè)置較大的k-v,因?yàn)檫@樣會(huì)導(dǎo)致redis的 內(nèi)存碎片增加,導(dǎo)致rss占用較大,最后被操作系統(tǒng)OOM killer干掉。一個(gè)很具體的issue例子請(qǐng)見(jiàn):https://github.com/antirez/redis/issues/2136
  3. 如果采用序列化考慮通用性,請(qǐng)采用json相關(guān)的庫(kù)進(jìn)行處理,如果對(duì)內(nèi)存大小和速度都很關(guān)注的,推薦使用messagepack進(jìn)行序列化和反序列化
  4. 如果需要計(jì)數(shù)器,請(qǐng)將計(jì)數(shù)器的key通過(guò)天或者小時(shí)分割,比如下邊的設(shè)計(jì):

 6.需要修改為:


 7.更好的一個(gè)設(shè)計(jì)是采用hash:

 8.各種數(shù)據(jù)結(jié)構(gòu)及其占用內(nèi)存的benchmark測(cè)試
set個(gè)數(shù)每個(gè)set的元素總數(shù)內(nèi)存占用Key大小Value大小
1001001.88M736
100100010.75M736
10010000111.12M736
100010011.59M836
10001000100.35M836
1000100001.08G836
10000100108.71M936
100001000996.23M936
zset個(gè)數(shù)每個(gè)zset的元素總數(shù)內(nèi)存占用Key大小Value大小
1001001.62M849
100100015.91M849
10010000162.06M849
10001008.71M949
10001000151.87M949
1000100001.58G949
1000010079.83M1049
1000010001.48G1049
hash個(gè)數(shù)每個(gè)hash的元素總數(shù)內(nèi)存占用Key大小Value大小
1001001.63M849
10010006.29M849
10010000156.91M849
10001008.71M949
1000100055.59M949
1000100001.52G949
1000010079.83M1049
100001000548.58M1049
list個(gè)數(shù)每個(gè)list的元素總數(shù)內(nèi)存占用Key大小Value大小
1001001.23M836
100100010.00M836
1001000092.40M836
10001004.83M936
1000100092.52M936
100010000916.47M936
1000010040.76M1036
100001000917.69M1036
string個(gè)數(shù)內(nèi)存占用Key大小Value大小
100846.79K1336
1000966.29K1336
100002.16M1336
100000130.88M1336


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)