Redis判断key的失效和存在

Redis缓存体系结构中,Delete与Expire操作都可以用于清理缓存中的Key,这两者不同之处在于Delete操作需要人为手动触发,而Expire只需要提供一个TTL,即“过期时间”,就可以实现Key的自动失效,也就是自动被清理

1. 调用SETEX方法中指定key的过期时间
@RequestMapping("/expire")
    public void exTest() throws Exception{
        // 构造redis操作组件
        final String key="redis:test:6";
        ValueOperations valueOperations = redisTemplate.opsForValue();
        // 设置过期时间10s, TTL为19s
        valueOperations.set(key, "expire测试", 10L, TimeUnit.SECONDS);
        //等待5000s
        Thread.sleep(5000);
        //检查key是否存在
        Boolean haskey = redisTemplate.hasKey(key);
        Object value = valueOperations.get(key);
        log.info("key还存在 value是{}", value.toString());
        // 再次等待5s
        Thread.sleep(5000);
        haskey = redisTemplate.hasKey(key);
        value = valueOperations.get(key);
        log.info("这是key是否还存在{}, 值为{}", haskey, value);
    }
}

结果

结果

2.调用redisTemplate操作组件中的Expire()方法
@RequestMapping("/expire1")
public void extest2() throws Exception{
    final String key="redis:test7";
    ValueOperations valueOperations = redisTemplate.opsForValue();
    valueOperations.set(key, "test expire func");
    // 使用redisTemplate操作控件的expire时间为10s
    redisTemplate.expire(key, 10L, TimeUnit.SECONDS);
    // 等待5s
    Thread.sleep(5000);
    Boolean haskey = redisTemplate.hasKey(key);
    Object value = valueOperations.get(key);
    log.info("key是否还存在 {}, 值为{}", haskey, value);
    Thread.sleep(5000);
    haskey = redisTemplate.hasKey(key);
    value = valueOperations.get(key);
    log.info("这是key是否还存在{}, 值为{}", haskey, value);
}

结果:
结果.png

  • redisTemplate.haskey()可以判断key是否还存在
4.在实际中设置的key的失效时间和判断key是否存在的实际应用场景
  • 将数据库查询到的数据缓存一定的时间 TTL,在 TTL时间内前端查询访问数据列表时,只需要在缓存中查询即可,从而减轻数据库的查询压力。
  • 将数据压入缓存队列中,并设置一定的TTL时间,当TTL时间一到,将触发监听事件,从而处理相应的业务逻辑
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐