我们正在使用Redis存储洗牌的牌组。卡片由20个字符的GUID表示,卡片组是一组混洗卡片GUID。在Deck列表中调用的主要操作是LLEN(长度)和LPOP(弹出)。我们推到甲板的唯一时间是a)当甲板最初创建时b)当甲板用完纸牌并重新洗牌时(很少发生)。目前,甲板的长度从10到700不等。
Redis可以针对此类问题进行哪种类型的内存优化?我们可以配置任何类型的设置来减少内存开销,或优化使用(zip)列表数据类型的方式吗?
答案 0 :(得分:2)
我的第一个建议是使用8byte无符号整数作为标识符键而不是guid,这样可以节省内存中每个条目几个字节,并提高任何数据库的整体性能,包括你正在使用的redis。
如果您想使用guid,并考虑列表的大小以及您在列表中执行的操作。 您可以调整redis默认值以满足您的需要: Redis默认:
list-max-ziplist-entries 512
list-max-ziplist-value 64
您可以将其更改为:
list-max-ziplist-entries 1024 #to accomodate your 700 cards list
list-max-ziplist-value 256 # to accomodate your 20 byte guids
YMMV,因此您需要使用两种设置对redis进行基准测试,以获得存储以及样本数据的读/写性能。