当前第2页 返回上一页
1 2 3 4 5 6 7 | $rs = $redis ->set( $key , $value , array ( 'nx' , 'ex' => $ttl ));
if ( $rs ) {
$redis ->del( $key );
}
|
到这一步其实还是有问题的,如果一个请求更新缓存的时间比锁的有效期还要长,导致在缓存更新过程中锁就失效了,此时另一个请求就会获取到锁,但前一个请求在缓存更新完毕的时候,直接删除锁的话就会出现误删其它请求创建的锁的情况。所以要避免这种问题,可以在创建锁的时候需要引入一个随机值并在删除锁的时候加以判断
1 2 3 4 5 6 7 8 9 | $rs = $redis ->set( $key , $random , array ( 'nx' , 'ex' => $ttl ));
if ( $rs ) {
if ( $redis ->get( $key ) == $random ) {
$redis ->del( $key );
}
}
|
以上就是教你正确地使用Redis的SETNX实现锁机制的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
Redis启动与连接的方法
Redis用在哪里
Redis实现秒杀的方法介绍(附代码)
Redis为什么很快
Redis应用场景详细介绍
Redis介绍分布式数据库cap原理
Redis缓存时间一般多少
Redis可以采用什么方式实现限流
Redis源码多少行
Redis之django-Redis使用
更多相关阅读请进入《Redis》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » 教你正确地使用Redis的SETNX实现锁机制