当前位置: 首页 > 知识库问答 >
问题:

RedisCacheManager未更新密钥空间_未命中

嵇浩淼
2023-03-14

我使用的是spring boot spring data redis 1.8.9。发布用于缓存的CacheManager的RedisCacheManager实现。我想要了解的一个指标是缓存命中/未命中率。为了实现这一点,我提取了通过redis服务器暴露的键空间点击和键空间未命中,也可以通过redis_cli使用INFO STATS查看。问题是RedisCacheManager从不注册缓存未命中,即即使存在缓存“未命中”,键空间_未命中也不会增加。

在调试代码时,我看到spring data redis实际上会在检索之前检查redis中是否存在键。我看到了这种方法的意义,但是当对redis服务器执行存在时,它不会注册缓存未命中。

有没有办法使用RedisCacheManager并注册缓存未命中?我知道我可以使用其他redis对象来实现这一点,但我想知道是否可以通过标准的CacheManager实现来实现?

编辑

理想的解决方案不会增加大量开销,而且我无法编辑redis服务器的配置。

RedisCacheManager从缓存中检索元素时使用的代码。注意布尔值存在

public RedisCacheElement get(final RedisCacheKey cacheKey) {
    Assert.notNull(cacheKey, "CacheKey must not be null!");
    Boolean exists = (Boolean)this.redisOperations.execute(new RedisCallback<Boolean>() {
        public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
            return connection.exists(cacheKey.getKeyBytes());
        }
    });
    return !exists ? null : new RedisCacheElement(cacheKey, this.fromStoreValue(this.lookup(cacheKey)));
}

上述代码将在缓存未命中时通过MONITOR查看的redis上执行这些命令。再次注意,存在按照以下代码执行:

执行上述命令后,即使存在缓存缺失,keyspace_misses也不会递增:


共有1个答案

戎洛华
2023-03-14

问题中提到的代码是Spring提供的RedisCache的一部分。

  1. 扩展并创建RedisCache类的自定义实现,以覆盖“get”方法的行为,以满足您的需要
 类似资料:
  • 为什么using指令在包含在匿名命名空间中时表现得好像出现在全局范围?

  • gcc和msvc无法编译这段代码,错误消息< code >命名空间范围的匿名聚合必须是静态的。但是clang编译这个没有问题。https://godbolt.org/z/WecT6vP91 https://en.cppreference.com/w/cpp/language/union说 命名空间范围匿名联合必须声明为静态,除非它们出现在未命名的命名空间中。 这似乎是gcc和msvc的错误? 已编

  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id

  • 问题内容: 我只是想知道,如果一个键会发生什么是可变的,测试程序如下证明,我无法理解当两个平等和方法返回true和值相同,为什么回报。 这个输出: 是否6 6是 问题答案: 该javadoc的解释它 注意:如果将可变对象用作地图键,则必须格外小心。如果在对象是映射中的键的情况下以影响等值比较的方式更改对象的值,则不会指定映射的行为。 基本上,不要在地图中使用可变对象作为键,否则会被烧死 推断一下,

  • 我已经用这个链接备份了我在卡桑德拉的密钥空间cassandra-backup.sh 为了恢复,我写了一个脚本,从包含快照的备份文件夹中复制内容,并粘贴到 /var/lib/cassandra/data/mykeypsace/下的相应目录中,但是当我看到mykeyspace的表内容时,没有恢复任何内容。例如,备份文件夹:path/mykeyspace/tableOne/snapshot/all-co

  • 我在迁移(模式)和模型中添加了时间戳 我创建了一个包含数据库所有字段的数组,并将其插入到数据库中。 在表中,它更新除updated_at、created_at时间戳之外的所有字段 我有另一个(默认)用户模型,它更新时间戳。在那个模型中,我使用-