只要有可能的話,就盡量使用散列鍵而不是字符串鍵來儲存鍵值對數(shù)據(jù),因為散列鍵管理方便、能夠避免鍵名沖突、并且還能夠節(jié)約內(nèi)存。
具體實例: 節(jié)約內(nèi)存:Instagram的Redis實踐 blog.nosqlfan.com/html/3379.html
如果將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
如果采用序列化考慮通用性,請采用json相關(guān)的庫進(jìn)行處理,如果對內(nèi)存大小和速度都很關(guān)注的,推薦使用messagepack進(jìn)行序列化和反序列化
如果需要計數(shù)器,請將計數(shù)器的key通過天或者小時分割,比如下邊的設(shè)計:

需要修改為:

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

| set個數(shù) | 每個set的元素總數(shù) | 內(nèi)存占用 | Key大小 | Value大小 |
|---|---|---|---|---|
| 100 | 100 | 1.88M | 7 | 36 |
| 100 | 1000 | 10.75M | 7 | 36 |
| 100 | 10000 | 111.12M | 7 | 36 |
| 1000 | 100 | 11.59M | 8 | 36 |
| 1000 | 1000 | 100.35M | 8 | 36 |
| 1000 | 10000 | 1.08G | 8 | 36 |
| 10000 | 100 | 108.71M | 9 | 36 |
| 10000 | 1000 | 996.23M | 9 | 36 |
| zset個數(shù) | 每個zset的元素總數(shù) | 內(nèi)存占用 | Key大小 | Value大小 |
|---|---|---|---|---|
| 100 | 100 | 1.62M | 8 | 49 |
| 100 | 1000 | 15.91M | 8 | 49 |
| 100 | 10000 | 162.06M | 8 | 49 |
| 1000 | 100 | 8.71M | 9 | 49 |
| 1000 | 1000 | 151.87M | 9 | 49 |
| 1000 | 10000 | 1.58G | 9 | 49 |
| 10000 | 100 | 79.83M | 10 | 49 |
| 10000 | 1000 | 1.48G | 10 | 49 |
| hash個數(shù) | 每個hash的元素總數(shù) | 內(nèi)存占用 | Key大小 | Value大小 |
|---|---|---|---|---|
| 100 | 100 | 1.63M | 8 | 49 |
| 100 | 1000 | 6.29M | 8 | 49 |
| 100 | 10000 | 156.91M | 8 | 49 |
| 1000 | 100 | 8.71M | 9 | 49 |
| 1000 | 1000 | 55.59M | 9 | 49 |
| 1000 | 10000 | 1.52G | 9 | 49 |
| 10000 | 100 | 79.83M | 10 | 49 |
| 10000 | 1000 | 548.58M | 10 | 49 |
| list個數(shù) | 每個list的元素總數(shù) | 內(nèi)存占用 | Key大小 | Value大小 |
|---|---|---|---|---|
| 100 | 100 | 1.23M | 8 | 36 |
| 100 | 1000 | 10.00M | 8 | 36 |
| 100 | 10000 | 92.40M | 8 | 36 |
| 1000 | 100 | 4.83M | 9 | 36 |
| 1000 | 1000 | 92.52M | 9 | 36 |
| 1000 | 10000 | 916.47M | 9 | 36 |
| 10000 | 100 | 40.76M | 10 | 36 |
| 10000 | 1000 | 917.69M | 10 | 36 |
| string個數(shù) | 內(nèi)存占用 | Key大小 | Value大小 |
|---|---|---|---|
| 100 | 846.79K | 13 | 36 |
| 1000 | 966.29K | 13 | 36 |
| 10000 | 2.16M | 13 | 36 |
| 100000 | 130.88M | 13 | 36 |