使用redis的setnx制作排他锁

来源:互联网 发布:java中方法什么意思啊 编辑:程序博客网 时间:2024/05/23 10:57
今日发现一个逻辑select count,如果没有数据那么执行insert
正常情况下数据库应该有一条数据,但是实际发现出现两条
经测试是因为多进程并发发起请求 selectcount提前执行导致的
最终讨论后使用排他锁保证事务同样参数时只执行一个

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

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

备注:请记得加expire……
原创粉丝点击