redis 计数 java_redission计数器实现,redisTemplate计数器
在redission 2.9.0版本之前是有BUG,在實現下面代碼時,第一次是成功的,但是在第二次就會失敗:
RedissonClient client;//client參考別的demo
RMapCache mapCache = client.getMapCache("nameSpace");
mapCache.putIfAbsent("redisKey", 0, 1, TimeUnit.DAYS);//當不存在redisKey時,就放置這個redis,存在則不放置
在redission 2.9.0(3.4.1)版本之后修復BUG,多次操作是成功的:
RedissonClient client = RedissonHolder.getClient();//具體實現參考別的demo
RMapCache mapCache = client.getMapCache("nameSpace",IntegerCodec.INSTANCE);
String redisKey = channel + "-" + userId;
mapCache.putIfAbsent("redisKey", 0, 1, TimeUnit.DAYS);
logger.info("獲取redis計數器:{}", redisKey);
int incr = mapCache.addAndGet(redisKey, 1);//加1并獲取計算后的值
參考pom:
org.redisson
redisson
3.4.1
可參考redis demo:
import java.io.IOException;
import java.io.InputStream;
import java.util.ResourceBundle;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RedissonHolder {
private static final Logger LOGGER = LoggerFactory.getLogger(RedissonHolder.class);
private static final RedissonHolder HOLDER = new RedissonHolder();
private RedissonClient redisson;
private RedissonHolder() {
String location = ResourceBundle.getBundle("redisson").getString("redisson.json.location");
InputStream inputStream = RedissonHolder.class.getClassLoader().getResourceAsStream(location);
Config config = null;
try {
config = Config.fromJSON(inputStream);
} catch (IOException e) {
LOGGER.error("獲取Redisson配置文件失敗", e);
}
this.redisson = Redisson.create(config);
}
public static RedissonClient getClient() {
return HOLDER.redisson;
}
}
redisson.properties(等號后面全部換成一行) :
redisson.json.location ={"singleServerConfig":{"idleConnectionTimeout":10000,
"pingTimeout":1000,
"connectTimeout":10000,
"timeout":5000,
"retryAttempts":5,
"retryInterval":1500,
"reconnectionTimeout":3000,
"failedAttempts":3,
"password":"root",
"subscriptionsPerConnection":5,
"clientName":null,
"address":"redis://my.redis.com:6379",
"subscriptionConnectionMinimumIdleSize":1,
"subscriptionConnectionPoolSize":50,
"connectionMinimumIdleSize":10,
"connectionPoolSize":64,
"database":0,
"dnsMonitoring":false,
"dnsMonitoringInterval":5000
},
"threads":0,
"nettyThreads":0,
"codec":null,
"useLinuxNativeEpoll":false
}
基于 springboot 的 redisTemplate計數器
redisTemplate基本配置參考 http://www.cnblogs.com/tietazhan/p/7479585.html
然后就可以直接使用內部函數
redisTemplate.opsForHash().increment(H var1, HK var2, long var3);
第一個為緩存key值,第二個為hashKey值,第三個為增量值。
總結
以上是生活随笔為你收集整理的redis 计数 java_redission计数器实现,redisTemplate计数器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python标识符、命名规则及关键字(含
- 下一篇: JavaScript 书写方式与注释