将现有缓存移动到 Redis 集群

Moving existing caches to Redis Cluster

我现有的 Java 应用程序(在 Liberty 上运行)定义了一些缓存。 一些缓存(散列 key/value)的大小可能有几 GB。

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

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

例如而不是这个...

HSET cache1 cacheid1 "cache value" HSET cache1 cacheid2 "cache value" HSET cache2 cacheid3 "cache value"

我应该改用这个吗?

设置cache1_cacheid1"cache value" 设置 cache1_cacheid2 "cache value" SET cache2_cacheid3 "cache value"

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

谢谢!

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

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

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

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

正如您提到的那样,它具有优势,包括:

  • HLEN 计数条目
  • HSCAN 迭代字段,根据需要进行模式匹配,并使用字段获取值。 SCAN 将覆盖整个键空间,并且只有 return 个键,而不是值。
  • DELUNLINK 整个缓存

但它也有缺点:

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

看看Keys hash tags

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

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

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