当前位置:首页 > PHP

php 锁 三种实现

2026-02-14 04:57:29PHP

文件锁(flock)

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

php 锁 三种实现

$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 命令实现跨进程锁,需处理锁超时问题。
代码示例:

$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中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE T…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query…