Redis 內(nèi)存考慮

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

 6.需要修改為:


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

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號