【Redis】阿里面试官让我用Zk(Zookeeper)实现分布式锁
前言 锁我想不需要我过多的去说 , 大家都知道是怎么一回事了吧?
在多线程环境下 , 由于上下文的切换 , 数据可能出现不一致的情况或者数据被污染 , 我们需要保证数据安全 , 所以想到了加锁 。
所谓的加锁机制呢 , 就是当一个线程访问该类的某个数据时 , 进行保护 , 其他线程不能进行访问 , 直到该线程读取完 , 其他线程才可使用 。
还记得我之前说过Redis在分布式的情况下 , 需要对存在并发竞争的数据进行加锁 , 老公们十分费解 , Redis是单线程的嘛?为啥还要加锁呢?
看来老公们还是年轻啊 , 你说的不需要加锁的情况是这样的:
本文插图
单个服务去访问Redis的时候 , 确实因为Redis本身单线程的原因是不用考虑线程安全的 , 但是 , 现在有哪个公司还是单机的呀?肯定都是分布式集群了嘛 。
老公们你看下这样的场景是不是就有问题了:
你们经常不是说秒杀嘛 , 拿到库存判断 , 那老婆告诉你分布式情况就是会出问题的 。
本文插图
我们为了减少DB的压力 , 把库存预热到了KV , 现在KV的库存是1 。
- 服务A去Redis查询到库存发现是1 , 那说明我能抢到这个商品对不对 , 那我就准备减一了 , 但是还没减 。
- 同时服务B也去拿发现也是1 , 那我也抢到了呀 , 那我也减 。
- C同理 。
- 等所有的服务都判断完了 , 你发现诶 , 怎么变成-2了 , 超卖了呀 , 这下完了 。
正文一个骚里骚气的面试官啥也没拿的就走了进来 , 你一看 , 这不是你老婆嘛 , 你正准备叫他的时候 , 发现他一脸严肃 , 死鬼还装严肃 , 肯定会给我放水的吧 。
B站搜:三太子敖丙
咳咳 , 我们啥也不说了 , 开始今天的面试吧 。
正常线程进程同步的机制有哪些?
- 互斥:互斥的机制 , 保证同一时间只有一个线程可以操作共享资源 synchronized , Lock等 。
- 临界值:让多线程串行话去访问资源
- 事件通知:通过事件的通知去保证大家都有序访问共享资源
- 信号量:多个任务同时访问 , 同时限制数量 , 比如发令枪CDL , Semaphore等
分布式锁实现主要以Zookeeper(以下简称zk)、Redis、MySQL这三种为主 。
那先跟我聊一下zk吧 , 你能说一下他常见的使用场景么?
他主要的应用场景有以下几个:
- 服务注册与订阅(共用节点)
- 分布式通知(监听znode)
- 服务命名(znode特性)
- 数据订阅、发布(watcher)
- 分布式锁(临时节点)
他是个数据库 , 文件存储系统 , 并且有监听通知机制(观察者模式)
存文件系统 , 他存了什么?
节点
【【Redis】阿里面试官让我用Zk(Zookeeper)实现分布式锁】zk的节点类型有4大类
- 持久化节点(zk断开节点还在)
- 持久化顺序编号目录节点
- 临时目录节点(客户端断开后节点就删除了)
- 临时目录编号目录节点
节点怎么创建?
我特么 , 这样问的么?可是我面试只看了分布式锁 , 我得好好想想!!!
还好我之前在自己的服务器搭建了一个zk的集群 , 我刚好跟大家回忆一波 。
推荐阅读
- 畜牧业@畜牧互联网再次引爆:阿里养猪,京东养鸡,快看大佬们都在干嘛
- 『腾讯科技』淘宝天猫蒋凡在阿里内网回应传闻:深表歉意,恳请公司展开调查
- #阿里巴巴#将饿了么卖给阿里,套现600亿的大学生,如今在干什么呢?
- 服务@云市场跨步式发展 打造ToB云市场阿里腾讯外“第三股势力”
- 『程序员』阿里程序员感慨:公司期权套牢了我,外面开五六万的薪资都不想接
- 「创作者来直播」阿里老师给检察官做直播,猜猜带的什么货?
- 『湘潭』华为、京东、阿里云……湘潭欲打造的这个“英雄联盟”很是“牛”
- #新开普#阿里系进驻后股价翻倍,这家豫股却遭大股东减持套现63次丨立方财报眼
- 【天猫】天猫“总裁夫人”手撕张大奕:如涵股价暴跌9% 阿里股价波动较小
- [马云]卸任后的马云只拥有7的股权,为何却仍可以控制阿里
