近期,有一個項目需要用到數字的自增整數,范圍是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類測試是否滿足並發操作:
結果:
符合預期。就這樣。