redis 获取自增数
近期,有一个项目需要用到数字的自增整数,范围是0-199999,但公司数据库是mongodb、同时装有mysql、redis等存储数据的这些数据库,其中redis是集群模式,mongodb是paa( mongo节点是primary arbit arbit),毫无疑问,这需要处理高并发问题。公司的项目同时也是多节点模式。这样就决定了自写高并发自增函数不可以,起初我把方向转向了mongodb上,同时也找到了对应的方法名和调用方式。
本来想着可以比较顺利的解决,但事与愿违,mongodb上执行操作,数据显示正常。如下图:

但是在java 调用后发现:
MongoTemplate mongoTemplate = new MongoTemplate(new Mongo("XXXXIP",27017),"mongodbTest");
// MongoTemplate mongoTemplate = GetApplicationContextBean.getMongoTemplate();
Update update = new Update();
update.inc("sequence_value",1);
Query query =new Query();
query.addCriteria(new Criteria("_id").is("productid"));
FindAndModifyOptions options = new FindAndModifyOptions();
// 先查询,如果没有符合条件的,会执行插入,插入的值是查询值 + 更新值
options.upsert(true);
// 返回当前最新值
options.returnNew(true);
Mycol advuser = mongoTemplate.findAndModify(query, update, Mycol.class, "mycol");

结果Test后发现执行不了....报超时.....处理了很长时间任然没解决掉。
毅然决定放弃该方案,寻找新出路,无意间发现redis也可以实现自增序列功能,顿时心里一顿欢喜。那就开始,不多说,全程在集群类中找到这个incr方法


然后写Test类测试是否满足并发操作:
结果:

符合预期。就这样。
redis 获取自增数的更多相关文章
- mongodb 获取自增数
mongodb db.getCollection('user').findAndModify({update:{$inc:{'level':1}},query:{"name":&q ...
- redis中获取不同自增数的方法
项目需求,需要获取不同的自增数,然后与其他信息拼接成一个字符串作为编号,这边有一种基于数据库的获取自增数的方法,这边略过,还有一种基于redis的实现. 此方法可以用到redis的自增函数 publi ...
- Mybatis 在 insert 之后想获取自增的主键 id
记录一次傻逼的问题, 自己把自己蠢哭:Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1 错误说明: 返回的1是影响的行数,并不是自增的主键id: 想要获取自增主键id,需要 ...
- Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1
记录一次傻逼的问题, 自己把自己蠢哭:Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1 错误说明: 返回的1是影响的行数,并不是自增的主键id: 想要获取自增主键id,需要 ...
- 深入分析Mybatis 使用useGeneratedKeys获取自增主键
摘要 我们经常使用useGenerateKeys来返回自增主键,避免多一次查询.也会经常使用on duplicate key update,来进行insertOrUpdate,来避免先query 在i ...
- 记一次Docker中Redis连接暴增的问题排查
周六生产服务器出现redis服务器不可用状态,错误信息为: 状态不可用,等待后台检查程序恢复方可使用.Unexpected end of stream; expected type 'Status' ...
- MYSQL获取自增ID的四种方法
MYSQL获取自增ID的四种方法 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与tabl ...
- java操作MySQL数据库(插入、删除、修改、查询、获取所有行数)
插播一段广告哈:我之前共享了两个自己写的小应用,见这篇博客百度地图开发的两个应用源码共享(Android版),没 想到有人找我来做毕设了,年前交付,时间不是很紧,大概了解了下就接下了,主要用到的就是和 ...
- PHP如何获取文件行数
本文实例讲述了PHP获取文件行数的方法.分享给大家供大家参考.具体分析如下:提供两种实现方法,虽然第二种简单易懂,但是第一种效率最好第一种: <?php $file_path = 'xxx.tx ...
随机推荐
- @Validated和@Valid区别
注解地方 @Validated:可以用在类型.方法和方法参数上.但是不能用在成员属性(字段)上 @Valid:可以用在方法.构造函数.方法参数和成员属性(字段)上 两者是否能用于成员属性(字段)上直接 ...
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十五)
core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+e ...
- PythonI/O进阶学习笔记_3.1面向对象编程_python的多态和鸭子类型
前言: 与第一篇的面向对象内容不同的是,第一篇中的面向对象更多的是与类.对象结合起来的概念粗浅理解,就是在编程历史中诞生的一种思想方法. 这篇的面向对象编程,更多落实到在语言设计实现中,是如何体现面向 ...
- Vue函数式组件的应用
一.函数式组件和普通组件的区别 渲染快 没有实例,意味着没有(this) 没有生命周期(没有响应式数据) 二.组件函数的使用 1. 以局部组件为例,将组件标记为 functional=ture; 因为 ...
- javascript之操作数组方法
掌握如何操作数组,会让你的开发变得更加高效 1.栈和队列方法(以下四个方法都改变原数组) arr.push() //接受任意类型的参数,逐个添加到数组的末尾,并返回数组的长度 改变原数组 arr.po ...
- JS核心之DOM操作 下
目录: 1.节点类型之Document类型 2.节点类型之Element类型 3.节点类型之Text类型 4.综合小示例 -- 动态添加外部样式文件 5.查找元素的扩展方法 接上篇,我们先来看常用的三 ...
- list 分组
Map<Long, List<LogDataVo>> corpIdMap = list.stream().collect(Collectors.groupingBy(LogDa ...
- C++中的I/O输入输出问题
C++ I/O navigation: 1.文件输入输出 2.string流 1.输入输出 C++语言不直接处理输入输出,而是通过一些标准库中类型.从设备(文件,控制台,内存)中读取数据,向设备中写入 ...
- 大数乘法(适合k进制)
#include<stdio.h> #include<string.h> #define N 10000 void inv(char str[],int n) { int i, ...
- 1 PY环境与变量
一 环境与文件形式 1.环境搭建http://jingyan.baidu.com/article/eae07827f7f2d01fec5485f7.html 2. python 则进入交互模式 ex ...