redission计数器实现,redisTemplate计数器
在redission 2.9.0版本之前是有BUG,在实现下面代码时,第一次是成功的,但是在第二次就会失败:
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,多次操作是成功的:
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:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.4.1</version>
</dependency>
可参考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值,第三个为增量值。
redission计数器实现,redisTemplate计数器的更多相关文章
- Hadoop学习笔记—7.计数器与自定义计数器
一.Hadoop中的计数器 计数器:计数器是用来记录job的执行进度和状态的.它的作用可以理解为日志.我们通常可以在程序的某个位置插入计数器,用来记录数据或者进度的变化情况,它比日志更便利进行分析. ...
- php简单计数器程序(文本计数器、图形计数器)
分享二个php计数器的例子. 1).文本计数器 <?php $countfile="/count.txt"; //设置保存数据的文件 if (!file_exists($c ...
- Hadoop之计数器与自定义计数器及Combiner的使用
1,计数器: 显示的计数器中分为四个组,分别为:File Output Format Counters.FileSystemCounters.File Input Format Counters和Ma ...
- 9.1hadoop 内置计数器、自定义枚举计数器、Streaming计数器
1.1 计数器 计数器的作用是用来统计数量的,用于记录特定事件的次数,分为内置计数器.自定义java枚举计数器.自定义Stream计数器三大类.用于质量分析,或应用级统计.分析计数器的值比分析一堆日 ...
- 深入理解CSS计数器
× 目录 [1]创建计数器 [2]使用计数器 [3]DEMO 前面的话 我们对计数器已经不陌生了,有序列表中的列表项标志就是计数器. 创建计数器 创建计数器的基础包括两个方面,一是能重置计数器的起点, ...
- OC-内存管理-基本原理与引用计数器
基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用 ...
- 04-时序逻辑电路设计之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:以计数器为例学会简单的时序逻辑电路设计 实验平台:芯航线FPGA核心板 实验原理: 时序逻辑电路是指电路任何时刻的稳态输出不仅取决于当前的输入,还与前一时刻输入 ...
- .Net最佳实践3:使用性能计数器收集性能数据
本文值得阅读吗? 本文讨论我们如何使用性能计数器从应用程序收集数据.我们将先了解的基本知识,然后我们将看到一个简单的示例,我们将从中收集一些性能数据. 介绍: - 我的应用程序的性能是最好的,像火箭 ...
- Mysql数据库中的计数器表实时更新
如果某个应用中存在计数器,例如网站的总访问量.用户的粉丝数.文件下载数等等.如果相关应用在Mysql数据库的表中保存计数器,在更新计数器的时候可能会碰到并发问题.例如在web应用中,记录网站的点击次数 ...
随机推荐
- git 超前一个版本 落后一个版本的解决方案
在使用SourceTree的时候经常会遇见超前一个版本,落后N个版本的情况,遇见这种情况应该怎么办呢? 首先打开终端,最好是从SourceTree里面打开,菜单栏有个终端按钮. 然后输入: $ git ...
- 【Docker】mesos如何修改hostport默认端口范围?
1.marathon文档:https://mesosphere.github.io/marathon/docs/native-docker.html Static port mapping: It's ...
- (转)nio 连网和异步 I/O
连网和异步 I/O 概述 连网是学习异步 I/O 的很好基础,而异步 I/O 对于在 Java 语言中执行任何输入/输出过程的人来说,无疑都是必须具备的知识.NIO 中的连网与 NIO 中的其他任何操 ...
- Adb分析及获取root权限
Adb的全称为Android Debug Bridge,起到通过PC对Android系统的调试桥的作用,是一个多用途的工具,它能够执行多种命令,还能提供一个shell.这儿简单介绍一下Adb的代码结构 ...
- 通过LR监控Linux服务器性能
1)设置监控服务器要监控 UNIX 资源,必须配置 rstatd 守护程序.注意,可能已经配置了 rstatd守护程序,因为当计算机收到一个 rstatd 请求时,该计算机上的 inetd 自动激活r ...
- MFC中获取各个窗口之间的句柄或者指针对象的方法
MFC在非常多的对话框操作中,我们常常要用到在一个对话框中调用还有一个对话框的函数或变量.能够用例如以下方法来解决. HWND hWnd=::FindWindow(NULL,_T("S ...
- Struts2对于i18n的支持
struts.xml中可以配置 <constant name="struts.custom.i18n.resources" value="itcast"& ...
- php处理行业分类数据
实现步骤: 1.将excel表格存储为后缀名为 .csv格式的文件: 2.将.csv格式文件导入到mysql数据库中: 3.通过条件查询将所需要的数据查出并导入另一个数据表中: 下面是一些php片段: ...
- java基础讲解08-----类和对象
1.什么是面向对象? 面向对象设计的实质 就是对现实世界的对象进行建模操作. 现实的生活中,随处可见的一种事物就是对象,对象是事物存在的实体,通常我们将会对对象划分为两个部分,静态部分和动态部分.比如 ...
- Windows 环境下分布式跨域Session共享
为什么还是那句话,在网上找了N篇Session共享,但真正可以直接解决问题的还是没有找到. 一.以下为本人亲测,为防止环境不一致,对本文产生歧义,限定环境如下: 1. IIS7.0 2. Asp.ne ...