千家信息网

redis分布式锁的实现原理

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,小编给大家分享一下redis分布式锁的实现原理,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。举个不
千家信息网最后更新 2025年02月23日redis分布式锁的实现原理

小编给大家分享一下redis分布式锁的实现原理,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。

举个不太恰当的例子:

假设共享的资源就是一个房子,里面有各种书,分布式系统就是要进屋看书的人,分布式锁就是保证这个房子只有一个门并且一次只有一个人可以进,而且门只有一把钥匙。然后许多人要去看书,可以,排队,第一个人拿着钥匙把门打开进屋看书并且把门锁上,然后第二个人没有钥匙,那就等着,等第一个出来,然后你在拿着钥匙进去,然后就是以此类推

实现原理

互斥性

保证同一时间只有一个客户端可以拿到锁,也就是可以对共享资源进行操作

安全性

只有加锁的服务才能有解锁权限,也就是不能让a加的锁,bcd都可以解锁,如果都能解锁那分布式锁就没啥意义了

可能出现的情况就是a去查询发现持有锁,就在准备解锁,这时候忽然a持有的锁过期了,然后b去获得锁,因为a锁过期,b拿到锁,这时候a继续执行第二步进行解锁如果不加校验,就将b持有的锁就给删除了

避免死锁

出现死锁就会导致后续的任何服务都拿不到锁,不能再对共享资源进行任何操作了

保证加锁与解锁操作是原子性操作

这个其实属于是实现分布式锁的问题,假设a用redis实现分布式锁

假设加锁操作,操作步骤分为两步:

1,设置key set(key,value)2,给key设置过期时间

假设现在a刚实现set后,程序崩了就导致了没给key设置过期时间就导致key一直存在就发生了死锁

如何实现分布式锁

实现分布式锁的方式有很多,只要满足上述条件的都可以实现分布式锁,比如数据库,redis,zookeeper,在这里就先讲一下如何使用redis实现分布式锁

分布式锁实现的关键是在分布式的应用服务器外,搭建一个存储服务器,存储锁信息,这时候我们很容易就想到了Redis。首先我们要搭建一个Redis服务器,用Redis服务器来存储锁信息。

使用redis实现分布式锁

使用redis命令 set key value NX EX max-lock-time 实现加锁

使用redis命令 EVAL 实现解锁

在实现的时候要注意的几个关键点:

1、锁信息必须是会过期超时的,不能让一个线程长期占有一个锁而导致死锁;

2、同一时刻只能有一个线程获取到锁。

几个要用到的redis命令:

setnx(key, value):"set if not exits",若该key-value不存在,则成功加入缓存并且返回1,否则返回0。

get(key):获得key对应的value值,若不存在则返回nil。

getset(key, value):先获取key对应的value值,若不存在则返回nil,然后将旧的value更新为新的value。

expire(key, seconds):设置key-value的有效期为seconds秒。

看完了这篇文章,相信你对redis分布式锁的实现原理有了一定的了解,想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

分布式 服务 就是 只有 服务器 资源 钥匙 死锁 原理 信息 共享资源 命令 时间 保证 存储 个人 也就是 关键 房子 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 修改数据库主键和外键约束 软件开发 人年 报价 水星路由服务器无响应 西宁生鲜类的软件开发 计算机服务器管理 以网络安全立意的作文题 绝地求生怎么设置服务器 软件开发项目工程交付项目 数据库中什么是查询 服务器退下来的硬盘有用吗 梦三国连接服务器失败 农安通用网络技术服务保障 办公人员网络安全培训 泰格系统数据库ip地址 网络安全法的第一条是什么 怎么用一个网络安全模式 网络安全等级保护测试答案 如何删除数据库太早的表 机房机柜服务器排线进度 梅露可服务器数据库 奉贤区数据软件开发信息中心 国外知名的网络安全比赛 惠州自主可控软件开发供应商 茂名服务器租用 网络安全及网络空间安全核心 绝地求生怎么设置服务器 网络安全好还是计算机专业好 农安通用网络技术服务保障 toad导出多表数据库 凶宅数据库查询网南京
0