当前位置: 首页 > wzjs >正文

网站建设服务费如何做会计分录室内设计专业网站

网站建设服务费如何做会计分录,室内设计专业网站,做网站背景音乐,wordpress评论插件1. 数据库分布式锁 实现原理 基于唯一索引: 创建一张锁表,通过唯一索引(如锁名称)保证互斥性。 加锁:插入一条记录,成功则获取锁,失败则重试。 解锁:删除对应记录。 乐观锁&…

1. 数据库分布式锁

实现原理

  1. 基于唯一索引

    • 创建一张锁表,通过唯一索引(如锁名称)保证互斥性。

    • 加锁:插入一条记录,成功则获取锁,失败则重试。

    • 解锁:删除对应记录。

  2. 乐观锁(版本号)

    • 使用版本号字段,更新时检查版本号是否匹配。

  3. 悲观锁(SELECT FOR UPDATE)

    • 通过数据库行锁锁定记录(如 SELECT ... FOR UPDATE)。

          // 基于唯一索引的简单实现(JDBC示例)
public class DatabaseLock {
    private Connection connection;

    public boolean tryLock(String lockKey, String clientId, int expireSeconds) {
        try {
            String sql = "INSERT INTO distributed_lock (lock_key, client_id, expire_time) VALUES (?, ?, ?)";
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, lockKey);
            stmt.setString(2, clientId);
            stmt.setTimestamp(3, new Timestamp(System.currentTimeMillis() + expireSeconds * 1000));
            return stmt.executeUpdate() > 0;
        } catch (SQLException e) {
            return false;
        }
    }

    public void unlock(String lockKey, String clientId) {
        try {
            String sql = "DELETE FROM distributed_lock WHERE lock_key = ? AND client_id = ?";
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, lockKey);
            stmt.setString(2, clientId);
            stmt.executeUpdate();
        } catch (SQLException ignored) {}
    }
}

优缺点

  • 优点

    • 实现简单,无需额外依赖。

  • 缺点

    • 性能低(依赖数据库IO)。

    • 无自动超时机制(需手动清理过期锁)。

    • 单点故障风险。

适用场景

  • 低频并发场景,或作为临时方案。


2. Redis分布式锁

实现原理

  1. 单节点锁(SETNX + EXPIRE)

    • 加锁:使用 SET key value NX EX seconds 原子命令设置锁并指定超时时间。

    • 解锁:通过 Lua 脚本校验客户端唯一标识后删除锁。

  2. RedLock算法(多节点容错):

    • 向多个独立 Redis 节点请求锁,半数以上成功视为加锁成功。

Java代码示例(Jedis客户端)

public class RedisLock {
    private Jedis jedis;
    private String lockKey;
    private String clientId;
    private int expireTime;

    public RedisLock(Jedis jedis, String lockKey, int expireTime) {
        this.jedis = jedis;
        this.lockKey = lockKey;
        this.clientId = UUID.randomUUID().toString();
        this.expireTime = expireTime;
    }

    public boolean tryLock() {
        // 加锁:SET lockKey clientId NX EX expireTime
        String result = jedis.set(lockKey, clientId, SetParams.setParams().nx().ex(expireTime));
        return "OK".equals(result);
    }

    public void unlock() {
        // 解锁:通过Lua脚本保证原子性
        String luaScript = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
        jedis.eval(luaScript, Collections.singletonList(lockKey), Collections.singletonList(clientId));
    }
}

优缺点

  • 优点

    • 高性能(基于内存操作)。

    • 支持自动超时,避免死锁。

  • 缺点

    • 时钟漂移可能导致锁提前释放。

    • RedLock 算法实现复杂,依赖多节点。

适用场景

  • 高并发场景(如秒杀、限流)。


3. ZooKeeper分布式锁

实现原理

  1. 临时顺序节点

    • 加锁:客户端在 ZooKeeper 的锁目录下创建临时顺序节点。

    • 监听机制:判断当前节点是否为最小节点,是则获取锁;否则监听前一个节点的删除事件。

  2. 临时节点

    • 创建临时节点,成功则获取锁,否则监听节点删除。

public class ZkLock {
    private CuratorFramework client;
    private String lockPath;
    private InterProcessMutex lock;

    public ZkLock(CuratorFramework client, String lockPath) {
        this.client = client;
        this.lockPath = lockPath;
        this.lock = new InterProcessMutex(client, lockPath);
    }

    public boolean tryLock(long timeout, TimeUnit unit) {
        try {
            return lock.acquire(timeout, unit);
        } catch (Exception e) {
            return false;
        }
    }

    public void unlock() {
        try {
            lock.release();
        } catch (Exception ignored) {}
    }
}

// 使用示例
CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new RetryNTimes(3, 1000));
client.start();
ZkLock zkLock = new ZkLock(client, "/locks/resource");
try {
    if (zkLock.tryLock(10, TimeUnit.SECONDS)) {
        // 执行业务逻辑
    }
} finally {
    zkLock.unlock();
}

优缺点

  • 优点

    • 强一致性(ZooKeeper 的 ZAB 协议)。

    • 自动释放锁(临时节点断开即删除)。

    • 支持公平锁(顺序节点)。

  • 缺点

    • 性能低于 Redis(频繁的节点操作和监听)。

    • 需维护 ZooKeeper 集群。

适用场景

  • 需要强一致性和高可靠性的场景(如金融交易)。


对比总结

特性数据库锁Redis锁ZooKeeper锁
实现复杂度简单中等复杂
性能
可靠性中(依赖集群)
自动超时手动实现支持支持(临时节点)
公平性不支持不支持支持
适用场景低频简单场景高并发场景强一致性场景

选择建议

  1. Redis分布式锁:优先用于高并发场景(如秒杀),需注意锁续期问题。

  2. ZooKeeper分布式锁:用于需要强一致性和公平性的场景(如分布式事务)。

  3. 数据库锁:仅作为简单场景的临时方案。


注意事项

  • 锁超时时间:根据业务操作合理设置,避免锁过早释放。

  • 唯一客户端标识:防止其他客户端误删锁。

  • 容错机制:Redis 建议使用 RedLock,ZooKeeper 需集群部署。


文章转载自:

http://QFUgdRrn.tfcwj.cn
http://LIonpkuX.tfcwj.cn
http://KbGVtRLj.tfcwj.cn
http://BRnGAvnp.tfcwj.cn
http://R7EIjOA4.tfcwj.cn
http://fPGaeYpZ.tfcwj.cn
http://10kTduZw.tfcwj.cn
http://1skybdx2.tfcwj.cn
http://k7BkRwou.tfcwj.cn
http://Ni3sgqlX.tfcwj.cn
http://QSUxsmKF.tfcwj.cn
http://AQ4pVuU3.tfcwj.cn
http://vJd5a1Vk.tfcwj.cn
http://DfxJW3pg.tfcwj.cn
http://fZWKjsFI.tfcwj.cn
http://kigODKM1.tfcwj.cn
http://cbLRH3ZV.tfcwj.cn
http://OjefDHJU.tfcwj.cn
http://xcEpd4uq.tfcwj.cn
http://hou1wBuV.tfcwj.cn
http://6jPKDuzU.tfcwj.cn
http://PVFFV02v.tfcwj.cn
http://jecX5ERw.tfcwj.cn
http://dCY1rg8F.tfcwj.cn
http://V8TyQAGK.tfcwj.cn
http://ryJxslpD.tfcwj.cn
http://6UmqjORd.tfcwj.cn
http://WoniDq9u.tfcwj.cn
http://2o9eSZPc.tfcwj.cn
http://F3F6T0iP.tfcwj.cn
http://www.dtcms.com/wzjs/764382.html

相关文章:

  • 学做莱网站网站知识架构
  • 长治网站建设2345网址大全历史版本
  • 广州智能建站模板网络宣传怎么做
  • 做钓鱼网站论坛专门查公司的软件
  • 外贸网站 开源手机 网站制作
  • 网站建设服务费标准房地产开发公司招聘
  • 怎么做游戏充值代理网站东莞推广系统价格
  • 深圳建网站南海区住房城乡建设和水务局网站
  • 六安网站建设推广湖南装修公司口碑最好的是哪家
  • 网站备案 暂住证网站功能
  • 学校网站开发工程师数据科学与大数据技术
  • 遂昌建设局网站wordpress调用相关评论
  • 合肥网站开发招聘ui培训班哪家好
  • 南宁电子推广网站网站续费公司
  • 自己编写代码建设微网站天津网站排名提升
  • 四川城乡建设部网站域名邮箱申请
  • 青岛哪里做网站大气家具行业商城类公司网站织梦模板
  • 成都网站营销推广公司江门网站推广多少钱
  • 网站基本参数设置模块建设银行郑州中心支行网站
  • 制作网站项目流程电子元器件商城网站建设
  • 网站开发一个支付功能要好多钱国外还有那种做电商的网站
  • 营销型企业网站建站网站界面设计案例教程
  • 网站友链怎么添加事业单位建立网站
  • 中铁三局招聘学历要求石家庄网站排名优化
  • wordpress网站插件下载失败微信小程序推广佣金
  • wordpress网站seo旅游网站优化方案
  • 网站开发常用图标dremrever做网站流程
  • 亚马逊德国做deals 网站计算机平面设计主要学什么
  • 乐山企业网站建设网站建设先进个人
  • 锦江网站建设网站建设规划