利用StackExchange.Redis操作redis事务会产生ABA情况
ConnectionMultiplexer con = ConnectionMultiplexer.Connect("127.00.1:6379");// -- 1实例化客户端
IDatabase db= con.GetDatabase();//获取数据库 -- 2
var tran = db.CreateTransaction();//创建事物 -- 3
tran.AddCondition(Condition.StringEqual("key","40"));//--4 乐观锁
tran.StringSetAsync("key", "60"); --5 别的客户端修改了key的值
bool result = tran.Execute();//提交事物 --6
有个问题:
当执行第4步的时候,此时key对应value的值是40。
当执行到第6步之前,key的值在B客户端发生了更改变成30,然后又被C客户端改成40。
第6步取提交事务,我发现还是可以提交成功。 那这不就是ABA情况吗?
我用Redis的客户端 watch,multi,exec都不会出现ABA问题。为什么用StackExchange.Redis会出现啊。