在redission 2.9.0版本以前是有BUG,在實現下面代碼時,第一次是成功的,可是在第二次就會失敗:html
RedissonClient client;//client參考別的demo RMapCache<String, Integer> mapCache = client.getMapCache("nameSpace");
mapCache.putIfAbsent("redisKey", 0, 1, TimeUnit.DAYS);//當不存在redisKey時,就放置這個redis,存在則不放置
在redission 2.9.0(3.4.1)版本以後修復BUG,屢次操做是成功的:java
RedissonClient client = RedissonHolder.getClient();//具體實現參考別的demo RMapCache<String, Integer> 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:redis
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.4.1</version> </dependency>
可參考redis demo:spring
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(等號後面所有換成一行) :json
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
}api
基於 springboot 的 redisTemplate計數器緩存
redisTemplate基本配置參考 http://www.cnblogs.com/tietazhan/p/7479585.htmlspringboot
而後就能夠直接使用內部函數函數
redisTemplate.opsForHash().increment(H var1, HK var2, long var3);
第一個爲緩存key值,第二個爲hashKey值,第三個爲增量值。this