【问题标题】:Removing Redis Hash Key's field on LRU删除 LRU 上的 Redis Hash Key 字段
【发布时间】:2018-03-01 07:20:15
【问题描述】:

如何在 Redis 上设置 LRU,它不在实例级别,而是在某些特定级别。 让我们说一个哈希。 我将哈希键用作一个缓存桶,将字段用作键,值就是值。 所以它就像: Redis;s key-field-value = type-key-field 对我来说。

如果不是直截了当,那么我想使用另一个 DB 级 LRU。 (一个 Redis 实例有 16 个 DB,我想使用 DB 1 作为 LRU 这意味着进入 DB 1 的所有内容都将遵循 LRU,而进入 DB-2,3... 的所有内容都不会遵循 LRU)。

【问题讨论】:

    标签: hash redis lru


    【解决方案1】:

    我是用 Hash + Sorted Set 实现的。

    在我的情况下相当于 Redis 规范是:

    哈希 键、字段、值 = 类型、键、值

    排序集: key, score, value = type, lru_counter, key

    (取最低范围(如果你想删除 5 个元素, zrange(type, 0, 4) )这将为你提供最近最少使用的 5 个键)

    Hash 将存储实际的缓存。 并且 Sorted Set 将只存储带有分数的键(作为成员)。 redis hash 中的每次 put 和 get(在任何键上)都会增加 lru_counter(一个整数变量)并将条目放入具有相同键(type、lru_counter、key)和 lru_counter 分数的排序集中。

    因此,最近的 put/get 将在相同键的 Sorted Set 中具有最高分 (lru_counter) 值。

    当涉及到删除时,我取出得分最低的成员(zrange,这是 Hash 的关键)并从 Sorted Set 和 Hash 中删除。

    【讨论】:

      猜你喜欢
      • 2017-04-02
      • 2020-01-26
      • 1970-01-01
      • 2020-04-19
      • 2020-11-28
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      相关资源
      最近更新 更多