高负载时与PHP + Redis的并发连接

时间:2015-01-26 18:11:25

标签: php mongodb concurrency redis high-load

是否存在一些以高并发性处理数据的机制?

首先我们使用mongodb并且它具有解决问题的原子更新。但更新freq总计大约1000秒,我们设置Redis来帮助他们之间的mongo和writed同步。它运作良好,但我们在redis方面存在问题。

例如:

  1. 首次请求时间为0.01毫秒 - 进程退出时间为0.04毫秒
  2. 第二次请求时间为0.02毫秒,退出时间为0.03秒。
  3. 两个请求都获得相同的对象?更改它的数据并在退出时保存。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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