使用redis的setnx制作排他锁
2017-06-12 17:12
288 查看
今日发现一个逻辑select count,如果没有数据那么执行insert
正常情况下数据库应该有一条数据,但是实际发现出现两条
经测试是因为多进程并发发起请求 selectcount提前执行导致的
最终讨论后使用排他锁保证事务同样参数时只执行一个
使用redis的setnx对根据参数拼好的key的set进行赋值
如果赋值成功,那么继续执行下面操作
如果赋值失败,代表之前有进程正在跑
排他事务执行完毕后,删除刚才添加的key
setnx:当redis内存在此key的时候,插入失败并返回false,当redis内不存在此key的时候插入,并返回true
备注:请记得加expire……
正常情况下数据库应该有一条数据,但是实际发现出现两条
经测试是因为多进程并发发起请求 selectcount提前执行导致的
最终讨论后使用排他锁保证事务同样参数时只执行一个
使用redis的setnx对根据参数拼好的key的set进行赋值
如果赋值成功,那么继续执行下面操作
如果赋值失败,代表之前有进程正在跑
排他事务执行完毕后,删除刚才添加的key
setnx:当redis内存在此key的时候,插入失败并返回false,当redis内不存在此key的时候插入,并返回true
备注:请记得加expire……
相关文章推荐
- Redis的SETNX的使用方法
- 使用SETNX(redis)实现分布式锁
- 使用Visual C#制作可伸缩个性化窗体(作者:卢彦)
- 使用BCB制作控制面版程序
- 使用Canvas制作MIDlet的欢迎界面
- 使用Visual C#制作可伸缩个性化窗体(卢彦)
- 使用Javascript制作声音按钮
- 使用Installshield制作asp,asp.net应用的安装程序
- 使用Visual C#制作可伸缩个性化窗体
- 使用InstallShield制作ASP安装程序
- 使用C#制作《邮件特快专递》
- 如何制作和使用帮助文件
- MapObject控件使用之图层制作
- 使用VC#轻松制作SQL CmdShell
- 使用Visual C#制作可伸缩个性化窗体(引用)
- 使用VC#制作多线程TCP connect扫描器
- ---===HTML帮助文件的制作和使用(new)===---
- 使用Photoshop制作两端平滑衔接的背景图
- 使用图片制作网页滚动条
- 第一部分:使用iReport制作报表的详细过程(Windows环境下)