0

是否有某种机制可以以高并发方式处理数据?

首先,我们使用了 mongodb,它具有解决问题的原子更新。但是更新频率总计大约 1000\秒,我们设置 Redis 来帮助 mongo 并在它们之间编写同步。它工作得很好,但我们有 redis 的 concerrency 问题。

例如:

  1. 第一个请求出现在 0.01 毫秒 - 进程在 0.04 毫秒退出
  2. 第二个请求在 0.02 毫秒出现并在 0.03 秒退出。

两个请求都得到相同的对象?更改它的数据并在退出时保存。

当我们使用 mongodb 时——我们可以做——对象的部分更新,但使用 redis——我们不能。

是否可以同时使用来自多个进程的相同对象(数据)而不是整个覆盖它 - 只覆盖它的一部分?

我找到的唯一方法 - 在第二次获取之前创建锁定机制并等待进程存在。

4

1 回答 1

1

Redis 还没有您想要的这种机制(部分更新),但作为替代方案,您可以编写 Lua 脚本来避免并发问题。

在脚本中,您可以先读取一个值,根据需要对其进行操作,最后再次存储该值。Redis 确保脚本以原子方式执行,因此在这种情况下您不需要任何锁定机制。(*)

于 2015-01-27T01:43:35.460 回答