Redis分布式锁
Redis分布式锁 一、 Redis锁基础概念 1. 为什么需要Redis锁 Redis锁是一种基于内存数据库Redis实现的分布式锁机制,主要解决分布式系统中的资源竞争问题。相比数据库锁,Redis锁具有以下优势 高性能:基于内存操作,响应速度快 原子性保证:Redis单线程模型天然支持原子操作 分布式支持:可跨多台服务器使用 丰富的数据结构:支持多种锁实现方式 2. 基本实现原理 最简单的Redis锁实现方式: SET resource_name my_random_value NX PX 30000 NX:仅当key不存在时设置 PX:设置过期时间(毫秒) my_random_value:唯一标识,用于安全释放锁 二、Redis锁的实现方式 1. SETNX实现(基本方式) 实现步骤: 尝试获取锁:SETNX lock_key 1 获取成功则设置过期时间:EXPIRE lock_key 30 执行业务逻辑 释放锁:DEL lock_key 问题: 非原子操作,SETNX和EXPIRE之间可能崩溃导致死锁 2. SET扩展参数实现(推荐) Redis 2.6.12+版本支持扩展参数,可原子性完成设置 SET lock_key unique_value NX PX 30000 PHP实现示例: $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $lockKey = 'order_lock_123'; $uniqueId = uniqid(); $expire = 30000; // 30秒 // 尝试获取锁 $acquired = $redis->set($lockKey, $uniqueId, ['NX', 'PX' => $expire]); if ($acquired) { try { // 执行业务逻辑 processOrder(); } finally { // 使用Lua脚本保证原子性释放 $script = " if redis....