只要有可能的话,就尽量使用散列键而不是字符串键来储存键值对数据,因为散列键管理方便、能够避免键名冲突、并且还能够节约内存。
如果采用序列化考虑通用性,请采用json相关的库进行处理,如果对内存大小和速度都很关注的,推荐使用messagepack进行序列化和反序列化
如果需要计数器,请将计数器的key通过天或者小时分割,比如下边的设计:
需要修改为:
更好的一个设计是采用hash:
各种数据结构及其占用内存的benchmark测试
set个数
每个set的元素总数
内存占用
key大小
value大小
100
1.88m
7
36
1000
10.75m
10000
111.12m
11.59m
8
100.35m
1.08g
108.71m
9
996.23m
zset个数
每个zset的元素总数
1.62m
49
15.91m
162.06m
8.71m
151.87m
1.58g
79.83m
10
1.48g
hash个数
每个hash的元素总数
1.63m
6.29m
156.91m
55.59m
1.52g
548.58m
list个数
每个list的元素总数
1.23m
10.00m
92.40m
4.83m
92.52m
916.47m
40.76m
917.69m
string个数
846.79k
13
966.29k
2.16m
100000
130.88m
<b></b>
<b>redis开发运维实践指南</b><b>本文为《redis开发运维实践指南》内容,该书作者为黄鹏程,已授权云栖社区转载。</b>