每次从缓存中拉出数据时,Redis 缓存都希望增加一个计数器

Redis cache want to increment a counter every time data is pulled out of the cache

我有一个缓存,我想在这个缓存中存储一​​个 URL 键和一个计数器。每次访问数据时,该值都会递增。

第一个问题是我用的是模型

CrudRepository<Rate, String> 

除此之外

CrudRepository<Integer, String> 

不行,我需要一个模型,因为在模型上,我可以设置生存时间

@RedisHash(value = "Rate", timeToLive = 5)
public class Rate implements Serializable  {

但是,如果有一种方法可以只在缓存中说出字符串/整数对,并设置生存时间。我很乐意使用它。

我知道按键上有一个 INCR 函数,但文档说 INCR 命令用于将表示存储在指定键中的整数值的字符串递增 1。如果key不存在,则先创建并设置为0,再进行自增操作。如果键存在但存储在键中的值是错误的数据类型(不是字符串数据类型)或包含不能表示为整数的字符串值,则返回错误。此操作仅限于 64 位有符号整数。

使用 StringRedisTemplate 而不是 CrudRepository 走向不同的方向

public boolean isAllowed(String url, String maxRate) {
        logger.info("URL is "+url);
        boolean allow = false;
        ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
        String rate = valueOps.get(url);
        logger.info("RATE "+rate);
        if(rate == null) {
            valueOps.set(url, maxRate, 5, TimeUnit.SECONDS);
            allow = true;
        } else {
            valueOps.decrement(url, 1);
            if(Integer.parseInt(rate) > 0) {
                allow = true;
            }
        }
        return allow;
    }