【问题标题】:Redis cache want to increment a counter every time data is pulled out of the cache每次从缓存中拉出数据时,Redis 缓存都希望增加一个计数器
【发布时间】:2022-01-06 09:51:10
【问题描述】:

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

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

CrudRepository<Rate, String> 

除了

CrudRepository<Integer, String> 

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

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

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

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

【问题讨论】:

    标签: java redis


    【解决方案1】:

    使用 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;
        }
    

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 2021-04-12
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2021-07-02
      相关资源
      最近更新 更多