我现有的Java应用程序(运行在Java上)定义了许多缓存。有些缓存(散列键/值)的大小可以是几GB。
我正在考虑用集群实现Redis,我的问题是.
将现有的缓存映射到Redis散列中有意义吗?据我所读,Redis可以通过在不同的服务器上放置不同的散列来进行分区,但是它不会对散列项进行分区,这是正确的吗?
而不是这个。
“cache1 cacheid1”缓存值“HSET cache1 cacheid2”缓存值“HSET cache2 cacheid3”缓存值
我应该用这个代替吗?
设置cache1_cacheid1“缓存值”设置cache1_cacheid2“缓存值”“设置cache2_cacheid3”缓存值“
第二种方法对分区会更好吗?还是有其他方法?将缓存保持在散列中会变得更容易,例如,在计算元素或清空元素时。
谢谢!
发布于 2020-01-17 06:22:08
是的,Redis可以通过在不同的节点上放置不同的键来进行分区,但是它不会对散列项进行分区。
使用每个缓存的散列是一种有效的方法。
HSET cache1 cacheid1 "cache value" cacheid2 "cache value 2" 注意,您可以在同一个HSET命令上执行多个字段值对。
正如您所提到的,这具有优势,包括:
HLEN计数条目HSCAN用于迭代字段、模式匹配(如果需要)以及使用字段获取值.SCAN将覆盖整个键空间,并且只返回键,而不是值。DEL或UNLINK整个缓存但它也有缺点:
看看键散列标签。
这使您可以强制键在相同的散列槽上结束。因此,您的第二种方法可以使用:
MSET {cache1}cacheid1 "cache value" {cache1}cacheid2 "cache value 2"键名中包含{cache1}的所有键都将在同一个节点中结束。
https://stackoverflow.com/questions/59076950
复制相似问题