使用redis的setnx制作排他锁

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xcl_rockman/article/details/73127460
今日发现一个逻辑select count,如果没有数据那么执行insert
正常情况下数据库应该有一条数据,但是实际发现出现两条
经测试是因为多进程并发发起请求 selectcount提前执行导致的
最终讨论后使用排他锁保证事务同样参数时只执行一个

使用redis的setnx对根据参数拼好的key的set进行赋值
如果赋值成功,那么继续执行下面操作
如果赋值失败,代表之前有进程正在跑
排他事务执行完毕后,删除刚才添加的key

setnx:当redis内存在此key的时候,插入失败并返回false,当redis内不存在此key的时候插入,并返回true

备注:请记得加expire……

没有更多推荐了,返回首页