【问题标题】:Moving existing caches to Redis Cluster将现有缓存移动到 Redis 集群
【发布时间】:2020-01-17 18:00:15
【问题描述】:

我现有的 Java 应用程序(在 Liberty 上运行)定义了许多缓存。 一些缓存(散列键/值)的大小可以达到几 GB。

我正在考虑使用集群实现 Redis,我的问题是......

将现有缓存映射到 Redis 哈希是否有意义? 根据我的阅读,Redis 可以通过将不同的哈希放在不同的 服务器,但它不会对哈希条目进行分区,这是正确的吗?

例如而不是这个...

HSET cache1 cacheid1 "缓存值" HSET cache1 cacheid2 "缓存值" HSET cache2 cacheid3 "缓存值"

我应该改用这个吗?

SET cache1_cacheid1 "缓存值" SET cache1_cacheid2 "缓存值" SET cache2_cacheid3 "缓存值"

第二种方法是否更适合分区?还是有其他方法? 将缓存保存在哈希中会更容易,例如计算元素时 或清空它。

谢谢!

【问题讨论】:

    标签: redis redis-cluster


    【解决方案1】:

    是的,Redis 可以通过在不同节点上放置不同的键来进行分区,但它不会对哈希条目进行分区。

    对每个缓存使用哈希是一种有效的方法。

    HSET cache1 cacheid1 "cache value" cacheid2 "cache value 2" 
    

    请注意,您可以在同一个 HSET 命令上执行多个字段-值对。

    正如您所说,这具有优势,包括:

    • HLEN 统计条目
    • HSCAN 迭代字段、模式匹配(如果需要)以及获取字段值。 SCAN 将覆盖整个键空间,并且只返回键,而不是值。
    • DELUNLINK 整个缓存

    但它也有缺点:

    • 您不能在哈希字段上设置过期时间,只能在键上设置过期时间。
    • 哈希只能存储二进制安全字符串,因此您将无法在缓存哈希中使用列表、集合、排序集或哈希。

    看看Keys hash tags

    这允许您强制密钥在同一个哈希槽上结束。所以你的第二种方法可以使用:

    MSET {cache1}cacheid1 "cache value" {cache1}cacheid2 "cache value 2"
    

    键名中带有{cache1} 的所有键都将在同一个节点中结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 2021-02-25
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      相关资源
      最近更新 更多