当前第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中设置lru算法的方法
Redis是什么语言开发的
解决Redis容器使用Redis.conf启动失败
Redis连接数配置多少
Redis缓存满了怎么办
Redis server是什么
Redis讲解分布式数据库cap原理
Redis键过期设置
更多相关阅读请进入《Redis》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » 教你正确地使用Redis的SETNX实现锁机制