我正在编写poc来防止重复处理。我为此使用redis。
我使用了两个选项。 set
和hash
。两者均在固定时间执行insert
和exists
。
Set
:-存储结构
serviceId:[0 to 30]
:已处理ID [2019020100000000
]的列表
示例:
0 - 2019020100000000, 2019020100000001, etc..
1 - 2019020100000000, 2019020100000001, etc..
2 - 2019020100000000, 2019020100000001, etc..
3 - 2019020100000000, 2019020100000001, etc..
4 - 2019020100000000, 2019020100000001, etc..
所以我选了5 services
。每个已处理的6 million records
。 set for 5 services is 1.64GB [316MB each]
Hash
:
service Id
:[哈希名称]:
id[i.e] 2019020100000000
:[键名]
value is 1
示例:
0 : {2019020100000000:1, 2019020100000001:1, etc...}
1 : {2019020100000000:1, 2019020100000001:1, etc...}
2 : {2019020100000000:1, 2019020100000001:1, etc...}
3 : {2019020100000000:1, 2019020100000001:1, etc...}
4 : {2019020100000000:1, 2019020100000001:1, etc...}
我使用1
作为值。我的用例是存储由服务处理的ID列表。这里0-4是服务。 2019 *是ID。
我已使用相同的5 services[denoted by 0 to 4]
。每个已处理的7.5 million records
。占用的总内存为2.29GB
。 408MB occupied by each service
。
如果我深入查看,请设置已处理的6m条记录,并占用316mb。一组中每个条目恰好53字节。
但是散列在750万条记录中的占用量增加了4mb。 [750万* 53字节= 404MB]。但信息显示为408MB。
这是单个Redis实例。
我在多个地方读到散列占用更少的内存。但是我发现用例中占用了更多的内存。
如何优化或更改某些东西,以减少哈希的占用空间?