我必须在群集环境中生成一个范围(0-100.000)内的随机数(许多无状态的基于Java的应用服务器+ Mongodb) - 因此每个用户请求都会得到一些唯一的数字,并在接下来的几个请求中保留它
据我了解,我有两种选择: 1.有一些数字坚持在mongo和incrementAndGet它 - 但它不是原子 - 不好的选择。 2.使用Redis - 它的原子和支持计数器。 3.有什么想法吗?使用UUID并为其设置范围是否安全? 4. Hazelcast?
还有其他吗?
由于
答案 0 :(得分:2)
我会利用现有的MongoDB基础架构,并使用MongoDB findAndModify命令进行原子增量并获取操作。
对于shell,命令看起来像。
var result = db.ids.findAndModify( {
query: { _id: "counter" },
sort: { rating: 1 },
new : true,
update: { $inc: { counter: 1 } },
upsert : true
} );
'new:true'在更新后返回文档。如果文档丢失,Upsert会创建文档。
10gen supported driver和Asynchronous Driver都包含查找和修改命令的帮助方法/构建器。