【问题标题】:How can Redis be optimized for storing lists of GUIDs?Redis 如何优化存储 GUID 列表?
【发布时间】:2023-11-20 14:15:02
【问题描述】:

我们使用 Redis 来存储洗牌后的纸牌。一张卡片由一个 20 个字符的 GUID 表示,一副牌是一组洗牌的卡片 GUID。 Deck 列表中调用的主要操作是 LLEN(长度)和 LPOP(弹出)。我们推送到牌组的唯一时间是 a) 最初创建牌组时和 b) 当牌组用完牌并重新洗牌时(这种情况很少发生)。目前,甲板的长度从 10 到 700 件不等。

Redis 可以针对此类问题进行哪些类型的内存优化?我们可以配置任何类型的设置来减少内存开销,或优化 (zip)list 数据类型的使用方式吗?

相关文章:http://redis.io/topics/memory-optimization

【问题讨论】:

    标签: redis node-redis


    【解决方案1】:

    我的第一个建议是使用 8 字节无符号整数作为标识符键而不是 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 进行基准测试,以使用您的示例数据进行存储和读/写性能。

    【讨论】:

    • 感谢我们很快就会部署它!还要对变化进行基准测试,看看它有多大的影响。