gpt4 book ai didi

redis - 将现有缓存移动到 Redis 集群

转载 作者:行者123 更新时间:2023-12-03 06:45:59 24 4
gpt4 key购买 nike

我现有的 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 可以通过在不同节点上放置不同的键来进行分区,但它不会对哈希条目进行分区。

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

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

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

正如您所提到的,这具有优势,包括:
  • HLEN统计条目
  • HSCAN迭代字段,根据需要进行模式匹配,并使用字段获取值。 SCAN将覆盖整个键空间,并且只返回键,而不是值。
  • DELUNLINK整个缓存

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

  • 看看 Keys hash tags .

    这允许您强制 key 在同一个哈希槽上结束。所以你的第二种方法可以使用:
    MSET {cache1}cacheid1 "cache value" {cache1}cacheid2 "cache value 2"

    所有带有 {cache1} 的键键名中的最终将在同一个节点中。

    关于redis - 将现有缓存移动到 Redis 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59076950/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com