java结合redis秒杀功能java编程——从构建分布式秒杀系统聊聊分布式锁

前言最近懒成一坨屎,学不动系列一波接一波,大多还都是底层原理相关的。上周末抽时间重读了周志明大湿的 JVM 高效并发部分,每读一遍都有不同的感悟。路漫漫,借此,把前段时间搞着玩的秒杀案例中的分布式锁深入了解一下。案例介绍在尝试了解分布式锁之
前言最近懒成一坨屎,学不动系列一波接一波,大多还都是底层原理相关的。上周末抽时间重读了周志明大湿的JVM高效并发部分,每读一遍都有不同的感悟。路漫漫,借此,把前段时间搞着玩的秒杀案例中的分布式锁深入了解一下。案例介绍在尝试了解分布式锁之前,大家可以想象一下,什么场景下会使用分布式锁?单机应用架构中,秒杀案例使用ReentrantLcok或者synchronized来达到秒杀商品互斥的目的。然而在分布式系统中,会存在多台机器并行去实现同一个功能。也就是说,在多进程中,如果还使用以上JDK提供的进程锁,来并发访问数据库资源就可能会出现商品超卖的情况。因此,需要我们来实现自己的分布式锁。实现一个分布式锁应该具备的特性:高可用、高性能的获取锁与释放锁在分布式系统环境下,一个方法或者变量同一时间只能被一个线程操作具备锁失效机制,网络中断或宕机无法释放锁时,锁必须被删除,防止死锁具备阻塞锁特性,即没有获取到锁,则继续等待获取锁具备非阻塞锁特性,即没有获取到锁,则直接返回获取锁失败具备可重入特性,一个线程中可以多次获取同一把锁,比如一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法,而无需重新获得锁在之前的秒杀案例中,我们曾介绍过关于分布式锁几种实现方式:基于数据库实现分布式锁基于Redis实现分布式锁基于Zookeeper实现分布式锁前两种对于分布式生产环境来说并不是特别推荐,高并发下数据库锁性能太差,Redis在锁时间限制和缓存一致性存在一定问题。这里我们重点介绍一下Zookeeper如何实现分布式锁。实现原理

本文来自投稿,不代表长河网立场,转载请注明出处: http://www.changhe99.com/a/j2rkylZRdZ.html

(0)

相关推荐