分布式锁的三种实现方式面试

分布式锁三种实现方式:1、基于数据库实现分布式锁;2、基于缓存(Redis等)实现分布式锁;3、基于Zookeeper实现分布式锁。从性能角度(从高到低)来看:“缓存方式>Zookeeper方式>=数据库方式”。
1。悲观锁:利用select?where?forupdate排他锁。
所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不会产生锁等待而消耗资源,操作过程中认为不存在并发冲突,只有updateversion失败后才能觉察到。我们的抢购、秒杀就是用了这种实现以防止超卖。

  • 鍒嗗竷寮忛攣鏈鍝簺?
    绛旓細ZooKeeper鏄竴涓负鍒嗗竷寮忓簲鐢ㄦ彁渚涗竴鑷存ф湇鍔$殑寮婧愮粍浠讹紝瀹冨唴閮ㄦ槸涓涓垎灞傜殑鏂囦欢绯荤粺鐩綍鏍戠粨鏋勶紝瑙勫畾鍚屼竴涓洰褰曚笅鍙兘鏈変竴涓敮涓鏂囦欢鍚嶃傚熀浜嶼ooKeeper瀹炵幇鍒嗗竷寮忛攣鐨姝ラ濡備笅锛氾紙1锛塺edis set px nx + 鍞竴id + lua鑴氭湰 缁间笂鎵寰楋細娌℃湁缁濆瀹岀編鐨瀹炵幇鏂瑰紡锛屽叿浣撹閫夋嫨鍝竴绉嶅垎甯冨紡閿侊紝闇瑕佺粨鍚堟瘡涓绉...
  • Redis鍒嗗竷寮忛攣瀹炵幇Redisson 15闂
    绛旓細lua鑴氭湰鐨勫姏閲 褰搇ua鑴氭湰鎵ц鏃讹紝瀹冧細缁嗚嚧鍦版鏌ュ綋鍓閿佺殑鐘舵侊紝濡傛灉涓嶅瓨鍦ㄥ垯鍒涘缓锛屽悓鏃跺湪hash鏁版嵁缁撴瀯涓褰曞姞閿佹鏁般傝繖鏍凤紝鎴戜滑灏辨嫢鏈変簡涓涓棦鏀寔鍔犻攣鍙堜繚鎸佸彲閲嶅叆鎬х殑鍒嗗竷寮忛攣绯荤粺銆傝В閿佹満鍒 瀹屾垚浠诲姟鍚庯紝鎴戜滑鍙互閫氳繃Redisson鐨剈nlock()鏂规硶锛屽紓姝ヤ絾纭繚绾跨▼鎵鏈夋潈鐨刲ua鑴氭湰鏉ラ噴鏀鹃攣銆傛澶栵紝涓轰簡闃叉...
  • 鍒嗗竷寮忛攣鏄粈涔
    绛旓細3. 瀹炵幇鏂瑰紡锛鍒嗗竷寮忛攣鐨瀹炵幇閫氬父渚濊禆浜庝竴浜涙妧鏈墜娈碉紝濡傛暟鎹簱銆佺紦瀛樼郴缁熸垨鑰呬笓闂ㄧ殑鍒嗗竷寮忛攣鏈嶅姟銆傚父瑙佺殑瀹炵幇鏂瑰紡鍖呮嫭鍩轰簬鏁版嵁搴撹〃鐨勯攣鏈哄埗銆佷娇鐢≧edis绛夌紦瀛樼郴缁熺殑鍒嗗竷寮忛攣浠ュ強鍩轰簬ZooKeeper绛夊垎甯冨紡鍗忚皟鏈嶅姟鐨勯攣鏈哄埗绛夈傝繖浜涘疄鐜版柟寮忓悇鏈夌壒鐐癸紝浣嗙洰鏍囬兘鏄负浜嗙‘淇濆湪鍒嗗竷寮忕幆澧冧笅瀵瑰叡浜祫婧愮殑姝g‘鍜屽畨鍏ㄨ闂4...
  • 鍒嗗竷寮忛攣鏈鍝簺
    绛旓細閫氳繃ZooKeeper鐨勪复鏃惰妭鐐癸紙ephemeral node锛夊拰椤哄簭鑺傜偣锛坰equential node锛夌壒鎬э紝鍙互寰堝鏄撳湴瀹炵幇鍒嗗竷寮忛攣銆傚綋鏌愪釜鑺傜偣闇瑕佽幏鍙栭攣鏃讹紝瀹冨湪ZooKeeper鐨勬寚瀹氳矾寰勪笅鍒涘缓涓涓复鏃堕『搴忚妭鐐广傜敱浜嶼ooKeeper淇濊瘉浜嗚妭鐐圭殑鏈夊簭鎬э紝鍥犳鍙互鏍规嵁鑺傜偣鐨勯『搴忔潵纭畾鍝釜鑺傜偣鑾峰緱浜嗛攣銆傝繖绉鏂瑰紡鐨勪紭鐐规槸鍙潬鎬ч珮锛屼笖ZooKeeper杩...
  • zk瀹炵幇鍒嗗竷寮忛攣
    绛旓細甯歌鐨勫嚑绉嶅垎甯冨紡閿佺殑瀹炵幇鏂规锛孯edis銆丮ysql 銆亃ookeeper锛涙湰鏂囦富瑕佽鐨勬槸濡備綍浣跨敤zk瀹炵幇鍒嗗竷寮忛攣锛氬叿浣撴濊矾锛1銆侀鍏坺ookeeper涓垜浠彲浠ュ垱寤轰竴涓/distributed_lock鎸佷箙鍖栬妭鐐 2銆佺劧鍚庡啀鍦/distributed_lock鑺傜偣涓嬪垱寤鸿嚜宸辩殑涓存椂椤哄簭鑺傜偣锛屾瘮濡傦細/distributed_lock/task_00000000008 3銆佽幏鍙栨墍鏈夌殑/...
  • 鐪熸鐨 Redis 鍒嗗竷寮忛攣,灏辫鏄繖鏍瀹炵幇鐨
    绛旓細鍦ㄥ悓涓鏃跺埢锛屽彧鑳芥湁涓涓嚎绋嬪幓璇诲啓涓涓愬叡浜祫婧愩戯紝涔熷氨鏄珮骞跺彂鐨勫満鏅笅锛岄氬父涓轰簡淇濊瘉鏁版嵁鐨勬纭紝闇瑕佹帶鍒跺悓涓鏃跺埢鍙厑璁镐竴涓嚎绋嬭闂傛鏃跺氨闇瑕佷娇鐢鍒嗗竷寮忛攣浜嗐傜畝鑰岃█涔嬶紝鍒嗗竷寮忛攣灏辨槸鐢ㄦ潵鎺у埗鍚屼竴鏃跺埢锛屽彧鏈変竴涓嚎绋嬪彲浠ヨ闂淇濇姢鐨勮祫婧愩傚彲浠ヤ娇鐢 SETNX key value 鍛戒护瀹炵幇浜掓枼鐨勭壒鎬с傝В...
  • Redis鎬庝箞瀹炵幇鍒嗗竷寮忛攣
    绛旓細鍦ㄨ繖閲岀粰澶у鏀句竴娈典娇鐢ㄧ殑浠g爜锛屾瘮杈冪畝鍗,浣嗘槸鍙互鐩存帴鐢ㄥ埌浣犱滑鐨勯」鐩綋涓 鎴戜滑鍏堟妸杩欎釜瀹炵幇鏂瑰紡瀹炵幇浜嗭紝鐒跺悗鎴戜滑鍐嶆潵璇磋澶у鏈涓嶆効鎰忕湅鐨勭悊璁虹煡璇嗭紝姣曠珶杩欑悊璁虹煡璇嗘槸浣闈㈣瘯鐨勬椂鍊欑粡甯镐細琚棶鍒扮殑銆鍒嗗竷寮CAP鐞嗚锛氬姞宸炲ぇ瀛︿集鍏嬪埄鍒嗘牎鐨 Eric Brewer 鏁欐巿鍦 ACM PODC 浼氳涓婃彁鍑 CAP 鐚滄兂銆2骞村悗锛岄夯鐪...
  • 濡備綍瀹炵幇鍒嗗竷閿,闇瑕佽冭檻鐨勯棶棰
    绛旓細ZooKeeper涓繕鏈変竴绉嶅悕涓轰复鏃惰妭鐐圭殑鑺傜偣锛屼复鏃惰妭鐐圭敱鏌愪釜瀹㈡埛绔垱寤猴紝褰撳鎴风涓嶼ooKeeper闆嗙兢鏂紑杩炴帴锛屽垯寮鑺傜偣鑷姩琚垹闄ゃ傚埄鐢ㄤ笂闈㈣繖涓や釜鐗规э紝鎴戜滑鏉ョ湅涓嬭幏鍙瀹炵幇鍒嗗竷寮忛攣鐨鍩烘湰閫昏緫锛氬鎴风璋冪敤create()鏂规硶鍒涘缓鍚嶄负鈥渓ocknode/guid-lock-鈥濈殑鑺傜偣锛岄渶瑕佹敞鎰忕殑鏄紝杩欓噷鑺傜偣鐨勫垱寤虹被鍨嬮渶瑕佽缃负EPHEMERAL_...
  • 鍒嗗竷寮忛攣鐨涓浜涚粏鑺傞棶棰,鍊煎緱鏀惰棌
    绛旓細娌″姙娉曪紝閫艰揩浣犲繀椤诲緱鑳屼細瀹冦傛帴涓嬫潵灏辫涓嬬兢鍙闈㈣瘯纰板埌鐨勯棶棰橈紝鍥犱负鍊欓変汉鍙兘鑷繁宸茬粡鎺屾彙浜瀹炵幇鍒嗗竷寮忛攣鐨鍘熺悊锛屼絾鏄闈㈣瘯瀹橀棶鍒扮粏鑺傚彲鑳藉氨涓嶆竻妤氫簡锛屽洜姝ょ粰澶у璁蹭笅杩欏潡銆傞棶棰-1 濡傛灉setnx鎵ц鎴愬姛锛屼絾鏄湪expire鎵ц鐨勬椂鍊檙edis鑺傜偣瀹曟満浜嗭紝鍦ㄨ繖绉嶆儏鍐典笅锛岄攣涓嶄細琚噴鏀撅紝瀵艰嚧姝婚攣銆傝В鍐虫柟妗堬細闂-...
  • 浠涔堟槸鍒嗗竷寮忛攣
    绛旓細2. 鍏抽敭鎶鏈偣 鍒嗗竷寮忛攣鐨瀹炵幇娑夊強鍒颁竴浜涘叧閿殑鎶鏈偣銆傞鍏堬紝瀹冮渶瑕佸叿澶囪法鑺傜偣閫氫俊鐨勮兘鍔涳紝浠ヤ究涓嶅悓鐨勮妭鐐硅兘澶熻幏鍙栧拰閲婃斁閿併傚叾娆★紝鍒嗗竷寮忛攣闇瑕佸叿鏈夐珮鍙敤鎬у拰鍙潬鎬э紝鍗充娇鍦ㄩ儴鍒嗚妭鐐规晠闅滅殑鎯呭喌涓嬶紝绯荤粺涔熻兘姝e父杩愯銆傛澶栵紝瀹冭繕闇瑕佸鐞嗕竴浜涚壒娈婄殑鎯呭喌锛屽閿佺殑绔炴佹潯浠躲佹閿佺瓑闂銆3. 瀹炵幇鏂瑰紡 鍒嗗竷寮...
  • 扩展阅读:分布式事务四种方案 ... redis分布式锁三个方法 ... redis分布式锁面试题 ... 分布式锁解决什么问题 ... java分布式锁面试题 ... 分布式事务的几种方式 ... 分布式事务面试题 ... redis加锁三种方式 ... 分布式锁的正确步骤 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网