redis并发问题(tnx事例)

更新时间:2023-06-30 10:01:02 阅读: 评论:0

下⾯这个例⼦是利⽤⼀个原⼦性命令操作来限制整个流程的控制 tnx. <?php
require "vendor/autoload.php";
$client = new Predis\Client([
'scheme' => 'tcp',
'host'  => '127.0.0.1',earth hour
'port'  => 6379,
55届格莱美颁奖典礼
]);
class RedisLock
{
public $objRedis = null;
love in decemberpublic $timeout = 3;
/
**
* @desc 设置redis实例
*
* @param obj object | redis实例
*/
public function __construct($obj)
{
$this->objRedis = $obj;
}
/**
* @desc 获取锁键名
*/
public function getLockCacheKey($key)
{
return "lock_{$key}";
北大青鸟java培训
}
teamleader/**
* @desc 获取锁
*
* @param key string | 要上锁的键名
* @param timeout int | 上锁时间
*/
tallest
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) {unit
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) {编程java培训班
continue;
}
$isGet = $newExpire;
break;
}
return $isGet;
}
/**
西雅图是什么意思* @desc 释放锁
*项目负责人 翻译
* @param key string | 加锁的字段
* @param newExpire int | 加锁的截⽌时间

本文发布于:2023-06-30 10:01:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1070002.html

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

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