我必须在集群环境(许多基于 Java 的无状态应用服务器 + Mongodb)中生成范围(0-100.000)内的随机数 - 所以每个用户请求都会获得一些唯一的数字,并将在接下来的几个请求中维护它。
据我了解,我有两个选择: 1. 在 mongo 中保留一些数字并 incrementAndGet 它 - 但它不是原子的 - 不好的选择。2. 使用 Redis - 它是原子的并且支持计数器。3. 有什么想法吗?使用 UUID 并为其设置范围是否安全?4. 榛树?
还有别的吗?
谢谢
我必须在集群环境(许多基于 Java 的无状态应用服务器 + Mongodb)中生成范围(0-100.000)内的随机数 - 所以每个用户请求都会获得一些唯一的数字,并将在接下来的几个请求中维护它。
据我了解,我有两个选择: 1. 在 mongo 中保留一些数字并 incrementAndGet 它 - 但它不是原子的 - 不好的选择。2. 使用 Redis - 它是原子的并且支持计数器。3. 有什么想法吗?使用 UUID 并为其设置范围是否安全?4. 榛树?
还有别的吗?
谢谢
我将利用现有的 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 支持的驱动程序和异步驱动程序都包含用于查找和修改命令的辅助方法/构建器。