PHPackages                             msmm/hyperf-redis-lock - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. msmm/hyperf-redis-lock

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

msmm/hyperf-redis-lock
======================

一个简单的Redis分布式锁的实现 基于Hyperf框架。本扩展实现了基本的分布式锁，支持阻塞式分布式锁和非阻塞式分布式锁。

v1.0.0(1y ago)1415MITPHPPHP &gt;=8.1

Since Nov 6Pushed 1y ago1 watchersCompare

[ Source](https://github.com/hh-Ink/hyperf-redis-lock)[ Packagist](https://packagist.org/packages/msmm/hyperf-redis-lock)[ RSS](/packages/msmm-hyperf-redis-lock/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (1)Dependencies (10)Versions (2)Used By (0)

hyperf-redis-lock
=================

[](#hyperf-redis-lock)

一个简单的Redis分布式锁的实现 基于Hyperf框架。本扩展实现了基本的分布式锁，支持阻塞式分布式锁和非阻塞式分布式锁。

> fork 自 [Lysice/hyperf-redis-lock](https://github.com/Lysice/hyperf-redis-lock), 在其基础上支持 `Hyperf ^3.1`

原理
--

[](#原理)

`Redis`的命令为原子性 使用`Redis`的`set`即可保证业务的串行执行。 `2.8`之前版本的`Redis`不支持`set` 的`ex`选项 因此只能使用 `setnx+expire`的方式。 对应扩展1.0版本. `2.8`之后版本的`Redis`可以直接使用 `set` 的`nx+ex`选项。对应扩展2.\*版本

因此 2.\*版本只支持2.8版本以后的`Redis` 1.\*版本支持所有版本的`Redis`.

确认你的Redis版本 如果你的Redis低于 2.8版本 则set 命令不支持 ex选项 因此你需要安装1.0版本。
-----------------------------------------------------------

[](#确认你的redis版本-如果你的redis低于-28版本-则set-命令不支持-ex选项-因此你需要安装10版本)

`redis-server --version`

安装
--

[](#安装)

注意:请根据你的`Redis`版本

```
composer require msmm/hyperf-redis-lock
```

使用
--

[](#使用)

首先需要在程序内初始化你需要的 `redis`

```
/**
 * @var RedisLock
 */
protected $redis;

public function __construct(RedisFactory $redisFactory)
{
    $this->redis = $redisFactory->get('default');
}
```

- 非阻塞式锁(`互斥锁` 、`排它锁`) 该方法在尝试获取锁之后直接返回结果。若获取到锁则执行闭包后返回结果。否则返回false

```
public function lock(ResponseInterface $response)
{
    // 初始化RedisLock 参数:redis实例 锁名称 超时时间
    $lock = new RedisLock($this->redis, 'lock', 20);
    // 非阻塞式获取锁
    $res = $lock->get(function () {
        sleep(10);
        return [123];
    });
    return $response->json($res);
}
```

- 阻塞式锁（`自旋锁`） 该方法首先尝试获取锁，若获取失败 则每隔250毫秒获取一次 直到超时(等待时间超出本程序内锁的过期时间 则判定为超时)。如果锁获取成功 则执行闭包函数返回结果。 注意 若超时 则程序会抛出`LockTimeoutException`超时异常。应用程序内需要自己捕获该异常以便处理超时情况的返回结果。 例子:

```
/**
 * @return \Psr\Http\Message\ResponseInterface
 */
public function lockA(ResponseInterface $response)
{
    try {
        // 初始化RedisLock 参数:redis实例 锁名称 超时时间
        $lock = new RedisLock($this->redis, 'lock', 4);
        // 阻塞式
        $res = $lock->block(4, function () {
            return [456];
        });
        return $response->json(['res' => $res]);
    // 捕获超时异常 超时处理
    } catch (LockTimeoutException $exception) {
        var_dump('lockA lock check timeout');
        return $response->json(['res' => false, 'message' => '超时']);
    }
}
```

###  Health Score

29

—

LowBetter than 57% of packages

Maintenance36

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

595d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1476521?v=4)[Filepicker](/maintainers/Ink)[@Ink](https://github.com/Ink)

---

Top Contributors

[![hh-Ink](https://avatars.githubusercontent.com/u/16871357?v=4)](https://github.com/hh-Ink "hh-Ink (3 commits)")

---

Tags

phphyperf

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/msmm-hyperf-redis-lock/health.svg)

```
[![Health](https://phpackages.com/badges/msmm-hyperf-redis-lock/health.svg)](https://phpackages.com/packages/msmm-hyperf-redis-lock)
```

###  Alternatives

[hyperf/nano

Scale Hyperf application down to a single file

43413.8k2](/packages/hyperf-nano)[hyperf/di

A DI for Hyperf.

172.9M634](/packages/hyperf-di)[hyperf/watcher

Hot reload watcher for Hyperf

19885.5k29](/packages/hyperf-watcher)[hyperf/crontab

A crontab component for Hyperf.

131.6M71](/packages/hyperf-crontab)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
