java - 在集群环境中生成范围(0-100k)的随机数

标签 java mongodb random parallel-processing cluster-computing

我必须在集群环境(许多无状态基于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”返回更新后的文档。如果文档丢失,则更新插入将创建该文档。

10gen supported driverAsynchronous Driver两者都包含用于查找和修改命令的辅助方法/构建器。

关于java - 在集群环境中生成范围(0-100k)的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927608/

相关文章:

java - 在 Tomcat 中的其他 war 文件旁边提供单页应用程序

performance - 按值查询更快

javascript - mongodb - 没有本地的聚合查找

jQuery 选择具有相同类的随机元素

random - Julia 无法复制兰特

c++ - rand() 总是在每次运行时输出相同的数字

java - 如何找到继承给定接口(interface)的类实例?

java - 我应该将哪个文件夹导入 android studio 以便我可以打开现有项目?

Java 随机数生成器生成相同的数字但是当我比较它们时它不相同

javascript - 如何在 Express 中设置更新路线