开发中常用的锁总结

乐观锁

  • 乐观锁假设不会有冲突发生,因此在读取数据时不会加锁,而是在更新数据时判断数据是否被其他进程修改过,如果没有则更新,否则回滚。
  • 乐观锁适用于读多写少的场景。
  • 具体实现方式可以通过在数据表中增加一个版本号(或时间戳)字段,在更新时判断版本号是否一致来实现乐观锁。

悲观锁

  • 悲观锁的思想是“先锁定再操作”,它假设在任何时候都会有另一个线程来竞争同一个资源,因此在操作资源前先获取锁,并在操作完成后再释放锁。
  • 悲观锁适用于写多读少的场景。
  • 具体实现方式可以通过数据库提供的锁机制,如行级锁、表级锁、事务级锁等来实现悲观锁。

共享锁

  • 共享锁也称读锁,多个进程可以同时获取共享锁,但不能获取排他锁
  • 用于读取数据时的保护。
  • 具体实现方式可以通过在读取数据时获取共享锁,防止其他进程修改数据。

排他锁

  • 排他锁也称写锁,只能被一个进程获取
  • 用于修改数据时的保护。
  • 具体实现方式可以通过在修改数据时获取排他锁,防止其他进程同时修改数据。

自旋锁

  • 自旋锁是一种忙等锁,当一个进程请求锁时,如果锁已经被其他进程占用,则该进程会不断重试,直到获取到锁为止。
  • 具体实现方式可以通过在代码中添加自旋锁,使得进程在锁被释放之前不断尝试获取锁。

读写锁

  • 读写锁是一种特殊的锁,允许多个进程同时获取共享锁,但只允许一个进程获取排他锁
  • 用于读多写少的场景。
  • 具体实现方式可以通过在读取数据时获取共享锁,在修改数据时获取排他锁

分布式锁

概述

  • 分布式锁是在分布式系统中使用的一种锁机制。
  • 在分布式系统中,多个节点同时访问共享资源可能会导致数据不一致或竞争条件。为了避免这种情况,需要引入分布式锁机制。
  • 分布式锁是一种保护共享资源的机制,它可以确保在任何时候只有一个节点可以访问共享资源。
  • 分布式锁的实现需要解决一些问题,例如锁的粒度、锁的超时、死锁等问题。因此,在实现分布式锁时需要仔细考虑这些问题,以确保分布式锁的正确性和可靠性。

实现

  • 基于数据库的实现:使用数据库的事务机制来实现分布式锁。
  • 基于缓存的实现:利用缓存系统的原子性操作来实现分布式锁。
  • 基于ZooKeeper的实现:使用ZooKeeper的节点临时性、有序性等特性来实现分布式锁。

你可能感兴趣的:(java,大数据,数据库)