千家信息网

redis怎么加锁?

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍了redis加锁的方法,具有一定借鉴价值,需要的朋友可以参考下。如下资料是关于redis加锁的详细步骤内容。redis加锁分类redis能用的的加锁命令分表是INCR、SETNX、SE
千家信息网最后更新 2025年01月20日redis怎么加锁?

这篇文章主要介绍了redis加锁的方法,具有一定借鉴价值,需要的朋友可以参考下。如下资料是关于redis加锁的详细步骤内容。


redis加锁分类

redis能用的的加锁命令分表是INCR、SETNX、SET

第一种锁命令INCR

这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作进行加一。
然后其它用户在执行 INCR 操作进行加一时,如果返回的数大于 1 ,说明这个锁正在被使用当中。

1、 客户端A请求服务器获取key的值为1表示获取了锁

2、 客户端B也去请求服务器获取key的值为2表示获取锁失败

3、 客户端A执行代码完成,删除锁

4、 客户端B在等待一段时间后在去请求的时候获取key的值为1表示获取锁成功

5、 客户端B执行代码完成,删除锁

$redis->incr($key);$redis->expire($key, $ttl); //设置生成时间为1秒

第二种锁SETNX

这种加锁的思路是,如果 key 不存在,将 key 设置为 value

如果 key 已存在,则 SETNX 不做任何动作

1、 客户端A请求服务器设置key的值,如果设置成功就表示加锁成功

2、 客户端B也去请求服务器设置key的值,如果返回失败,那么就代表加锁失败

3、 客户端A执行代码完成,删除锁

4、 客户端B在等待一段时间后在去请求设置key的值,设置成功

5、 客户端B执行代码完成,删除锁

$redis->setNX($key, $value);$redis->expire($key, $ttl);

第三种锁SET

上面两种方法都有一个问题,会发现,都需要设置 key 过期。那么为什么要设置key过期呢?如果请求执行因为某些原因意外退出了,导致创建了锁但是没有删除锁,那么这个锁将一直存在,以至于以后缓存再也得不到更新。于是乎我们需要给锁加一个过期时间以防不测。

但是借助 Expire 来设置就不是原子性操作了。所以还可以通过事务来确保原子性,但是还是有些问题,所以官方就引用了另外一个,使用 SET 命令本身已经从版本 2.6.12 开始包含了设置过期时间的功能。

1、 客户端A请求服务器设置key的值,如果设置成功就表示加锁成功

2、 客户端B也去请求服务器设置key的值,如果返回失败,那么就代表加锁失败

3、 客户端A执行代码完成,删除锁

4、 客户端B在等待一段时间后在去请求设置key的值,设置成功

5、 客户端B执行代码完成,删除锁

$redis->set($key, $value, array('nx', 'ex' => $ttl)); //ex表示秒

上文描述的就是redis加锁的详细内容,具体使用情况还需要大家自己动手实验使用过才能领会。如果想了解更多相关内容,欢迎关注行业资讯频道!

客户 客户端 成功 代码 时间 服务器 服务 内容 命令 代表 原子 思路 方法 问题 加一 意外 以防不测 上文 事务 价值 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发公司贵州 深圳艾瑟网络技术公司怎么样 深圳屠龙网络技术有限公司 核心专利数据库 用云服务器架设魔兽 武汉荆棘谷网络技术 许昌金蝶销售软件开发 数据库管理系统 答案 主机屋的数据库初始化失败 网络安全法与基本法的区别 检索的外文数据库 数据库系统概论期末练习题 数据库工程师职称评定 Mulstim数据库没了 云趣网络技术有限公司怎么样 网信办滴滴网络安全审查 松江区创新软件开发服务收费 计算机网络技术(前端程序设计) 关于网络安全的书签图片 杭州互惠网络技术服务 南京互联网软件开发业务流程 增强网络安全意识工作范文 租用境外服务器的目的 易诚互动网络技术校招 如何使用guid数据库行标识 注意事项网络安全 哈尔滨有名的软件开发公司 计算机网络技术对我得影响 网络安全三种鉴别方式 第一节华为网络技术大赛
0