目录
前言
在一个分布式系统中,也会涉及到多个节点同时去访问一个公共资源的时候,此时就需要通过锁来做互斥控制,避免出现类似于“线程安全”的问题~~
本质上来说就是使用一个公共的服务器,用来记录加锁状态
当然这个服务器也可以是Redis,也可以是其他的组件(MySQL、ZooKeeper等),自己手搓也行
分布式锁的基础实现
其实就是通过一个键值对来标识锁的状态
例如:买票的时候,存在多个能够购票的软件(12306、携程等)但是票的总数是固定的,所以我们都需要先查询该票的余票是否大于0,如果成立那么票数--
但是上述的情况会出现“线程安全”问题(访问临界资源)

在上述的场景的时候就会出现“超卖”的现象~~
可以在购票服务器中加一个Redis来作为分布式锁的管理器

此时如果买票服务器尝试买票,就需要先访问Redis,在Redis上设置一个键值对。比如key就是车次,value就随意
如果当前设置成功,就是为当前没有节点对001车次加锁,那么就可以对数据库进行写操作,操作完成之后再把Redis上的键值对给删除掉
如果在买票服务器1买001车次的票的时候, 买票服务器2也要买001车次的票,此时买票服务器2也会想向Redis中写入key 为 001的键值对,但是此时该key已经存在,那么就会设置失败,那么我们就认为此时其他服务器持有锁,那么买票服务器2就应该等待或放弃~~
Redis提供了setnx操作,即:key不存在就设置,存在直接失败
看起

最低0.47元/天 解锁文章
1054

被折叠的 条评论
为什么被折叠?



