【发布时间】:2022-01-05 15:01:51
【问题描述】:
我正在查看一个问题,其中我有一个包含字符串键和计数器的对象。每次访问对象时,计数器都会递减。这带来了竞争条件的问题。为了解决这个问题,我使用 synchronized 关键字编写了以下代码
try {
option = cartRepository.findById(url);
Rate rate = option.get();
synchronized (this) {
if(rate.getRate() > 0) {
rate.decRate(1);
allow = true;
cartRepository.save(rate);
}
}
} catch(NoSuchElementException e) {
cartRepository.save(new Rate(url, 5));
allow = true;
}
我想知道,redis 本身是否具有在您每次访问该键时递增或在这种情况下递减计数器的功能。 文档有点混乱。它确实谈到了键的自动增量。但我猜,它不是用钥匙和计数器创建一个两部分的钥匙。但是每次创建和保存新对象时都会自动增加一个键。
【问题讨论】:
-
我查看了 INCR 和 DECR 的文档,非常混乱。它增加一个数字键。我的密钥都是 URL。而且我不知道如何使用该命令。我有一个非常简单的设置。我的代表扩展了 CrudRepository
。在我看来,我不必使用 CrudRepository 连接到 REDIS
标签: java redis race-condition