欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

redis 获取自增数

程序员文章站 2023-11-06 22:37:40
近期,有一个项目需要用到数字的自增整数,范围是0-199999,但公司数据库是mongodb、同时装有mysql、redis等存储数据的这些数据库,其中redis是集群模式,mongodb是paa( mongo节点是primary arbit arbit),毫无疑问,这需要处理高并发问题。公司的项目 ......

    近期,有一个项目需要用到数字的自增整数,范围是0-199999,但公司数据库是mongodb、同时装有mysql、redis等存储数据的这些数据库,其中redis是集群模式,mongodb是paa( mongo节点是primary arbit arbit),毫无疑问,这需要处理高并发问题。公司的项目同时也是多节点模式。这样就决定了自写高并发自增函数不可以,起初我把方向转向了mongodb上,同时也找到了对应的方法名和调用方式。

    本来想着可以比较顺利的解决,但事与愿违,mongodb上执行操作,数据显示正常。如下图:

    redis 获取自增数

    但是在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");

redis 获取自增数

 

结果test后发现执行不了....报超时.....处理了很长时间任然没解决掉。

毅然决定放弃该方案,寻找新出路,无意间发现redis也可以实现自增序列功能,顿时心里一顿欢喜。那就开始,不多说,全程在集群类中找到这个incr方法

redis 获取自增数

 

 

 redis 获取自增数

 

 然后写test类测试是否满足并发操作:

结果:

redis 获取自增数

 

 符合预期。就这样。