2015-01-26 54 views
0

是否有一些處理高併發數據的機制?高負載下與PHP + Redis的併發連接

首先我們使用了mongodb,它有解決問題的原子更新。但更新頻率約爲1000秒,我們設置Redis來幫助它們之間的mongo和writed syncronisation。它工作的很好,但是我們在redis上有個問題。

例如:

  1. 第一個請求來了在0.01ms - 進程退出在0.04ms
  2. 二次要求在0.02ms和退出來了在0.03秒。

這兩個請求都得到相同的對象?改變它的數據並保存在退出。

當我們使用mongodb時 - 我們可以做 - 部分更新對象,但使用redis - 我們不能。

是否可以同時使用多個進程中的同一對象(數據)進行操作,而不是將其全部覆蓋 - 只有部分?

我發現的唯一方法 - 創建鎖定機制並等待第二次獲取之前存在的進程。

回答

1

Redis不具備您想要的機制(部分更新) 但作爲替代,您可以編寫Lua腳本以避免併發問題。

在腳本中,您可以先讀取值,然後按需要操作它,最後再次存儲該值。 Redis確保腳本將以原子方式執行, ,因此您不需要此方案的任何鎖定機制。 (*)