我使用Redis作为我的数据库,客户端使用ServiceStack.Redis。问题在于,如果两个并发请求需要更新一个键,则可能会产生竞争条件。例如:
A: 1. 获取 key 的值 2. 开始 MULTI 3. a = a - 100 4. 设置 key 的值为 a 5. 执行 EXEC
B: 1. 获取 key 的值 2. 开始 MULTI 3. a = a - 100 4. 设置 key 的值为 a 5. 执行 EXEC
如果原始的“key”值为1000,并且A和B是串行的,则这两个“key”的操作得到正确的结果将是800。但是,如果A和B同时发生,在A可以提交之前,操作B从“key”获取值1000,并将900设置为“key”的值。这不是我想要的。如何避免这种竞争条件,使用“WATCH”?
A: 1. 获取 key 的值 2. 开始 MULTI 3. a = a - 100 4. 设置 key 的值为 a 5. 执行 EXEC
B: 1. 获取 key 的值 2. 开始 MULTI 3. a = a - 100 4. 设置 key 的值为 a 5. 执行 EXEC
如果原始的“key”值为1000,并且A和B是串行的,则这两个“key”的操作得到正确的结果将是800。但是,如果A和B同时发生,在A可以提交之前,操作B从“key”获取值1000,并将900设置为“key”的值。这不是我想要的。如何避免这种竞争条件,使用“WATCH”?