php 高并发接口,接口高并发解决方案
1. 同服务器下, 使用文件锁机制<?php
/**
* 用于解决PHP在并发时候的锁控制,不同的锁之间并行执行,类似mysql innodb的行级锁
*/
class FileLock {
//文件锁存放路径
private $path='/dev/shm';
//文件句柄
private $fp='';
//锁文件
private $lockFile='';
/**
* 构造函数
* @param string $name 锁 KEY
*/
public function __construct($name)
{
$this->lockFile=$this->path.md5($name).'.lock';
}
/**
* 加锁
*/
public function lock()
{
$this->fp=fopen($this->lockFile, 'a+');
if($this->fp===false){
return false;
}
register_shutdown_function(array($this, 'unlock'));
return flock($this->fp, LOCK_EX);//获取独占锁
}
/**
* 解锁 (尽量手动解锁)
*/
public function unlock()
{
if($this->fp!==false){
@flock($this->fp,LOCK_UN);
clearstatcache();
}
@fclose($this->fp);
@unlink($this->lockFile);
}
}
2. 多服务器下, 使用redis incr 机制 (判断incr 返回值是否为1 不为1 则die)<?php
namespace Lock;
use handler\redisHandler;
class redisLock
{
const KEY_LOCK = 'lock:%s:%s'; // tag uid
private $lockey = '';
private function __construct($tag, $uid)
{
$this->lockey = sprintf(self::KEY_LOCK, $tag, $uid);
}
public static function instance($tag, $uid)
{
$self = new self($tag, $uid);
return $self->lock();
}
public function lock()
{
$incr = redisHandler::getRedisLock()->incr($this->lockey);
if ($incr != 1) {
return false;
}
redisHandler::getRedisLock()->expire($this->lockey, 10);
register_shutdown_function(array($this, 'unlock'));
return true;
}
public function unlock()
{
return redisHandler::getRedisLock()->pexpire($this->lockey, 1);
}
}
redisHandler::getRedisLock 是redis单例模式实例
php 高并发接口,接口高并发解决方案相关推荐
- JavaWeb 并发编程 与 高并发解决方案
在这里写写我学习到和自己所理解的 Java高并发编程和高并发解决方案.现在在各大互联网公司中,随着日益增长的互联网服务需求,高并发处理已经是一个非常常见的问题,在这篇文章里面我们重点讨论两个方面的问题 ...
- java并发编程与高并发解决方案
知识点 线程安全,线程封闭,线程调度,同步容器,并发容器,AQS,J.U.C,等等 高并发解决思路与手段 扩容:水平扩容.垂直扩容 缓存:Redis.Memcache.GuavaCache等 队列:K ...
- 《Java并发编程入门与高并发面试》or 《Java并发编程与高并发解决方案》笔记
<Java并发编程入门与高并发面试>or <Java并发编程与高并发解决方案>笔记 参考文章: (1)<Java并发编程入门与高并发面试>or <Java并发 ...
- Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...
JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...
- java 高并发 订单编号递增(解决方案)
java 高并发 订单编号递增(解决方案) 参考文章: (1)java 高并发 订单编号递增(解决方案) (2)https://www.cnblogs.com/chihirotan/p/6483890 ...
- PHP高并发商品秒杀问题的解决方案
前言 秒杀会产生一个瞬间的高并发,使用数据库会增加数据库的访问压力,也会降低访问速度,所以我们应该使用缓存,来降低数据库的访问压力: 可以看出这里的操作和原来的下单是不一样的:产生的秒杀预订单不会马上 ...
- 01 - Java并发编程与高并发解决方案笔记-基础篇
01 - Java并发编程与高并发解决方案笔记-基础篇 基础篇很重要!很重要!很重要!!!一定要理解和认真思考. 01 - Java并发编程与高并发解决方案笔记-基础篇 1.课程准备 2.并发编程基础 ...
- 高并发缓存队列防止溢出解决方案
目录 1 背景介绍 1.1 设计分析微信抢红包 1.2 红包定时导入缓存队列 2 队列术限流 2.1 高并发场景分析 2.2 队列削峰实战 3 设计原则 3.1 动静分离 3.2 微服务化 3.3 负 ...
- mysql并发量_高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!
推荐阅读: 学会这些微服务+Tomcat+NGINX+MySQL+Redis,再去面试阿里P7岗吧 "火爆"的微服务架构你还不会?从基础到原理的PDF文档快来学! Nginx负载均 ...
- 友盟+高吞吐、极速高并发智能推送服务,赋能值得买科技的精准化用户运营
数据智能产业创新服务媒体 --聚焦数智 · 改变商业 经过多年的发展,我国消费电商总体上处于商品溢出.内容溢出的状态.如何提升C端(消费者)和B端(品牌与商家)的连接效率,成为消费电商企业亟需解 ...
最新文章
- BZOJ 2257: [Jsoi2009]瓶子和燃料
- 【存储知识学习】第一章存储系统的前世今生--《大话存储》阅读笔记
- 数据结构: 试用判定树的方法给出在中序线索化二叉树上: (1) 如何搜索指定结点的在中序下的后继。 (2) 如何搜索指定结点的在前序下的后继。(3) 如何搜索指定结点的在后序下的后继。
- WPF之Binding(转)
- 手把手教你学Dapr - 6. 发布订阅
- IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理
- AsyncToken模式替换通用的Listener模式
- android qq robot,安卓qq授权登陆源代码
- Python: str.strip()
- 数据结构与算法笔记-------选择排序
- 编程基本功:工作完成之后,还有做好、做精、做美、做顶、做宗等境界
- Github Actions 云编译 OpenWRT LEDE 固件
- RS485芯片UN485E的特点及其应用
- linux怎么检测硬盘坏道,linux怎么检测硬盘坏道|linux 硬盘坏道检测方法
- python爬取下厨房网站首页图片request+bs4
- 玲珑学院OJ 1130 - 喵哈哈村的魔法大师╳灬兲笙疯癫°月【强连通+可相交最小路径覆盖+背包】
- 为什么任何数的0次方都是1
- xorDecode 解密
- 刘若英唱《后来》失控大哭:初听不知曲中意,再听已是曲中人
- 胡戈 007大战猪肉王子