如何处理redis密钥的并发更新?

时间:2018-04-20 13:57:43

标签: concurrency redis

我在google上搜索了同样但我无法找到明确的答案。

我想解决的用例如下。多个系统发送与相同标识符相关联的进程完成状态。我想在完成与相同标识符关联的所有进程时发送通知。我想过使用redis作为我的数据存储,标识符作为键。通知系统是多线程的,将处理来自不同系统的状态完成事件。

场景:标识符123有两个与之关联的进程p1和p2。说一个通知系统线程处理p1完成状态。它从redis中提取与123相关的数据。它看到p2尚未完成。它将p1完成状态添加到redis值并更新密钥。假设P2完成状态并行发生同样的事情。最后,我的两个线程都没有发出最终完成状态。如何解决这个问题?

我从redis文档中看到redis是单线程的。这是否意味着当一个线程执行一个键的更新时,没有其他线程可以对同一个键执行任何读/写操作?

1 个答案:

答案 0 :(得分:0)

  

我从redis文档中看到redis是单线程的。这是否意味着当一个线程执行一个键的更新时,没有其他线程可以对同一个键执行任何读/写操作?

是的,但这确实意味着在当前线程使用新值更新它之前,另一个线程不会读取该值。它并不意味着另一个线程,不知道当前线程所做的更新,不会用自己的东西覆盖更新。

了解Redis' transactions,明确了解WATCH的工作原理。