当前位置:首页 > PHP

php 锁 三种实现

2026-02-14 04:57:29PHP

文件锁(flock)

使用 flock() 函数对文件进行加锁,适用于单机环境下的进程同步。
代码示例:

$fp = fopen("lockfile.lock", "w+");
if (flock($fp, LOCK_EX)) { // 获取独占锁
    // 临界区代码
    flock($fp, LOCK_UN); // 释放锁
} else {
    echo "获取锁失败";
}
fclose($fp);
  • LOCK_EX 为独占锁,LOCK_SH 为共享锁
  • 注意需配合 fopen() 使用,锁与文件句柄绑定

数据库锁

通过数据库事务或 SELECT FOR UPDATE 实现行级锁,适用于分布式环境。
MySQL 示例:

$pdo->beginTransaction();
$stmt = $pdo->prepare("SELECT * FROM table WHERE id = ? FOR UPDATE");
$stmt->execute([$id]);
// 临界区操作
$pdo->commit();
  • InnoDB 引擎支持行锁
  • 需注意事务隔离级别和死锁问题

Redis 分布式锁

利用 Redis 的 SETNX 命令实现跨进程锁,需处理锁超时问题。
代码示例:

php 锁 三种实现

$redis = new Redis();
$redis->connect('127.0.0.1');
$lockKey = 'resource_lock';
$token = uniqid();
$expire = 30; // 秒

if ($redis->set($lockKey, $token, ['NX', 'EX' => $expire])) {
    try {
        // 临界区代码
    } finally {
        // Lua脚本保证原子性删除
        $script = 'if redis.call("GET",KEYS[1]) == ARGV[1] then return redis.call("DEL",KEYS[1]) else return 0 end';
        $redis->eval($script, [$lockKey, $token], 1);
    }
}
  • 需设置唯一标识(token)避免误删
  • 推荐使用 Redlock 算法增强可靠性

标签: 三种php
分享给朋友:

相关文章

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 实现评论

php 实现评论

实现 PHP 评论功能 数据库设计 创建数据库表存储评论数据,通常包含以下字段: id:评论唯一标识 user_id:用户ID content:评论内容 created_at:评论时间 parent…