每次从缓存中拉出数据时,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;
}
我有一个缓存,我想在这个缓存中存储一个 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;
}