php memcached 加锁,一个好用的php 加锁类malkusch/lock,支持redis,predis,memcached,mysql,PostgreSQL等等...

github地址

安装

-PHP 7.1或以上

-可选的nrk/predis以使用Predis锁。

-可选的php-pcntl扩展名,用于启用锁定而flock() 无需在CLI脚本中等待。(linux)

-任选地flock(),ext-redis,ext-pdo_mysql,ext-pdo_sqlite, ext-pdo_pgsql或ext--memcached可以用作用于锁后端。请参阅下面的示例。

-如果ext-redis用于锁定并配置为使用igbinary进行序列化或使用lzf进行压缩,则必须另外安装-ext-igbinary和/或 ext-lzf必须安装。

###

composer require "malkusch/lock"

predis调用

$redis = new \Predis\Client(array(

'scheme' => 'tcp',

'host' => '127.0.0.1',

'port' => 6379,

));

#传入一个predis实例,设置redis key名为test_lock的锁,设置锁释放时间为10秒(10秒之后当前程序释放,新的实例获取此锁)

$mutex = new \malkusch\lock\mutex\PredisMutex([$redis], "test_lock",10);

$mutex->synchronized(function () {

echo 'start';

sleep(100);

//代码逻辑

});

redis调用(需安装php-redis扩展)

$redis = new Redis();

$redis->connect("localhost");

$mutex = new PHPRedisMutex([$redis], "balance");

$mutex->synchronized(function () use ($bankAccount, $amount) {

$balance = $bankAccount->getBalance();

$balance -= $amount;

if ($balance < 0) {

throw new \DomainException("You have no credit.");

}

$bankAccount->setBalance($balance);

});

mysql调用

#它支持超时。如果与数据库服务器的连接丢失或中断,则锁定将自动释放。

#请注意,在MySQL 5.7.5之前,您不能使用嵌套锁,任何新锁都会静默释放已经持有的锁。您可能应#该避免在版本低于5.7.5的MySQL版本上使用此互斥锁。

$pdo = new PDO("mysql:host=localhost;dbname=test", "username");

$mutex = new MySQLMutex($pdo, "balance", 15);

$mutex->synchronized(function () use ($bankAccount, $amount) {

$balance = $bankAccount->getBalance();

$balance -= $amount;

if ($balance < 0) {

throw new \DomainException("You have no credit.");

}

$bankAccount->setBalance($balance);

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值