[狗尾续貂第二篇]Redis内存锁的实现方法

写在前面

总感觉,自己总有一天会被这个系列的文章杀死,也就是某一天给了自己一个嘴巴,或者被对方给一个狠狠地嘴巴:(((( 不过,也正因为这个系列都是博客文章浏览量比较大的博主,也希望给大家一个引导作用吧,毕竟能够多看一些大博主的博客长知识还是很快的。

还是先列出博客原文

博主e421083458的一篇关于Redis的watch在秒杀中使用的小博文。
redis使用watch完成秒杀抢购功能

后来,整体查了一下redis用来做锁的方法:除了博主给出的watch机制之外还可以用setnx的方式。两种方式按照数据库的锁机制做对照的话:1.watch就是乐观锁,也就是用时间戳的方式实现,不是真正的形成等待,而是时间戳不一致时(也就是有其他线程/进程/机器修改时),令自己的修改失败。2.setnx方式就是类似于悲观锁了,也就是拿不到就失败,不会等到修改的时候再失败(或者说,必须拿到锁才修改)。

watch实现的另外一篇

对于watch的实现,大家还可以参考下这一篇,http://book.2cto.com/201306/25048.html,里面给出了更加完整的代码。

setnx实现

setnx就是不存在才设置,一旦设置了,其他的设置都会失败。
这里有两篇不错的文章:

一个是单redis的setnx使用

一个就是分布式锁的实现方法,这是官方给出的实现方法,据官方说是比市面上的patch都周全的方法

你可能感兴趣的:(狗尾续貂)