将现有缓存移动到 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 个键,而不是值。
DEL
或 UNLINK
整个缓存
但它也有缺点:
- 您不能在哈希字段上设置过期,只能在键上设置。
- 哈希只能存储二进制安全的字符串,因此您将无法在缓存哈希中使用列表、集合、排序集合或哈希。
这允许您强制键在同一个哈希槽中结束。所以你的第二种方法可以使用:
MSET {cache1}cacheid1 "cache value" {cache1}cacheid2 "cache value 2"
键名称中带有 {cache1}
的所有键将在同一节点中结束。
我现有的 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 个键,而不是值。DEL
或UNLINK
整个缓存
但它也有缺点:
- 您不能在哈希字段上设置过期,只能在键上设置。
- 哈希只能存储二进制安全的字符串,因此您将无法在缓存哈希中使用列表、集合、排序集合或哈希。
这允许您强制键在同一个哈希槽中结束。所以你的第二种方法可以使用:
MSET {cache1}cacheid1 "cache value" {cache1}cacheid2 "cache value 2"
键名称中带有 {cache1}
的所有键将在同一节点中结束。