颜漠戈'host'  => '127.0.0.1','port'  => 6379,微笑服务培训]);cl " />

颜漠戈'host'  => '127.0.0.1','port'  => 6379,微笑服务培训]);cl"/>

redis并发问题(tnx事例)

更新时间:2023-06-14 03:37:23 阅读: 评论:0

下⾯这个例⼦是利⽤⼀个原⼦性命令操作来限制整个流程的控制 tnx. <?php
require "vendor/autoload.php";
$client = new Predis\Client([
'scheme' => 'tcp',
慷慨激扬>颜漠戈'host'  => '127.0.0.1',
'port'  => 6379,
微笑服务培训]);
class RedisLock
{
public $objRedis = null;
public $timeout = 3;
/
**
* @desc 设置redis实例
*
* @param obj object | redis实例
*/
public function __construct($obj)
{
$this->objRedis = $obj;韩荆州
漫漫红糖水
}
/**
* @desc 获取锁键名
*/
public function getLockCacheKey($key)
{
return "lock_{$key}";
}
/**
* @desc 获取锁
*
* @param key string | 要上锁的键名
* @param timeout int | 上锁时间
*/
public function getLock($key, $timeout = NULL)
{
$timeout = $timeout ? $timeout : $this->timeout;
$lockCacheKey = $this->getLockCacheKey($key);
肇庆鼎湖山$expireAt = time() + $timeout;
$isGet = (bool)$this->objRedis->tnx($lockCacheKey, $expireAt);
if ($isGet) {
return $expireAt;
}
招聘自我介绍
while (1) {
usleep(10);
$time = time();
$oldExpire = $this->objRedis->get($lockCacheKey);
if ($oldExpire >= $time) {
continue;
}
$newExpire = $time + $timeout;
$expireAt = $this->objRedis->gett($lockCacheKey, $newExpire);
if ($oldExpire != $expireAt) {
continue;
英语常用口语
}
$isGet = $newExpire;
break;
}
return $isGet;
}
/**
* @desc 释放锁
*
* @param key string | 加锁的字段
* @param newExpire int | 加锁的截⽌时间

本文发布于:2023-06-14 03:37:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1037511.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:限制   键名   加锁   时间   上锁   流程
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图