是否有一些机制来处理高并发数据?
首先,我们使用了mongodb,它具有解决问题的原子更新。但是更新频率高达大约 1000''秒,我们设置 Redis 来帮助 mongo 并在它们之间写入同步。它工作得很好,但我们在 redis 方面存在一致性问题。
例如:
- 第一个请求在 0.01ms 时出现 - 进程在 0.04ms 时退出
- 第二个请求在 0.02ms 时出现,在 0.03 秒时退出。
两个请求都得到相同的对象? 更改其数据并在退出时保存。
当我们使用 mongodb 时 - 我们可以做 - 对对象进行部分更新,但使用 redis - 我们不能。
是否可以同时使用来自多个进程的相同对象(数据)进行操作,而不是覆盖整个 - 仅覆盖部分?
我找到的唯一方法 - 创建锁定机制并在它存在时等待进程,然后再第二次获取它。
Redis 还没有你想要的机制(部分更新),但作为替代方案,您可以编写 Lua 脚本来避免并发问题。
在剧本中,您可以先读取一个值,根据需要对其进行操作,最后再次存储该值。Redis 确保脚本以原子方式执行,这样,在这种情况下您就不需要任何锁定机制。(*)