php redis并发读写,PHP使用Redis实现防止大并发下二次写入的方法
本文实例讲述了PHP使用Redis实现防止大并发下二次写入的方法。分享给大家供大家参考,具体如下:
PHP调用redis进行读写操作,大并发下会出现:读取key1,没有内容则写入内容,但是大并发下会出现同时多个php进程写入的情况,这个时候需要加一个锁,即获取锁的php进程有权限写。
$lock_key = 'LOCK_PREFIX' . $redis_key;
$is_lock = $redis->setnx($lock_key, 1); // 加锁
if($is_lock == true){ // 获取锁权限
$redis->setex($redis_key, $expire, $data); // 写入内容
// 释放锁
$redis->del($lock_key);
}else{
return true; // 获取不到锁权限,直接返回
}
思路是:设置一个锁的key,setnx是原子操作,只能一个进程写入成功,写入成功返回true(表示获取锁权限),然后写入内容再释放锁即删除锁key。获取不到锁的进程直接返回。但是这里有种情况,获取锁权限的进程,获取锁后运行报错了,导致没有释放锁,那么一直就不能写入内容,这时就需要拿不到锁权限的进程去判断锁的剩余有效时间,如果为-1则设置锁的有效时间为5秒(预留5秒给拿到锁的进程的运行时间,足够多了)。改良后的代码:
$lock_key = 'LOCK_PREFIX' . $redis_key;
$is_lock = $redis->setnx($lock_key, 1); // 加锁
if($is_lock == true){ // 获取锁权限
$redis->setex($redis_key, $expire, $data); // 写入内容
// 释放锁
$redis->del($lock_key);
}else{
// 防止死锁
if($redis->ttl($lock_key) == -1){
$redis->expire($lock_key, 5);
}
return true; // 获取不到锁权限,直接返回
}
希望本文所述对大家PHP程序设计有所帮助。
php redis并发读写,PHP使用Redis实现防止大并发下二次写入的方法相关推荐
- redis主从读写分离replication复制数据+sentienl哨兵集群主备切换
说明:最近公司在自己搭建了一套redis主从读写分离+sentinel哨兵集群主备切换,通过手工去搭建replication复制+主从架构+读写分离+哨兵集群+高可用redis集群架构 公司的已经搭建 ...
- 【重难点】【Redis 03】缓存雪崩、缓存穿透、缓存击穿、Redis 的内存过期策略、并发读写和双写
[重难点][Redis 03]缓存雪崩.缓存穿透.缓存击穿.Redis 的内存过期策略.并发读写和双写 文章目录 [重难点][Redis 03]缓存雪崩.缓存穿透.缓存击穿.Redis 的内存过期策略 ...
- 缓存穿透、缓存雪崩、redis并发
把redis作为缓存使用已经是司空见惯,但是使用redis后也可能会碰到一系列的问题,尤其是数据量很大的时候,经典的几个问题如下: (一)缓存和数据库间数据一致性问题 分布式环境下(单机就不用说了)非 ...
- Redis系列教程(七):Redis并发竞争key的解决方案详解
Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题: 高并发架构系列:Redis缓存和MySQL数据一致性方案详解 如何解决Redis缓 ...
- Redis并发竞争key的解决方案详解
1.Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿.缓存雪崩.缓存和数据一致性,以及今天要谈到的缓存并发竞争. 这里的并发 ...
- redis之读写分离
写在前面 本文一起看下redis的读写分离架构. 1:为什么要读写分离 读写分离,即主库执行写请求,然后写的数据同步到从库,从库执行读请求,架构图如下: 一般读写分离带给我们的好处可能如下: 分担主库 ...
- Linux企业运维 6.6 -- Redis部署及主从切换、Redis+Mysql读写分离
目录 Redis简介 redis的编译.安装 1.server1的redis配置 2.server2的redis安装 3.server3配置redis 三.redis主从复制 四.Sentine主从自 ...
- 秋招面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等
轰轰烈烈的秋招季已经开始,有人欢喜有人愁,不管你是喜是忧,学习总归是好的.这不,小编特地整理了一下秋招面试知识点+答案(JAVA岗),一起分享出来给大家看看~ 需要完整版的 知识点+答案 的朋友可以 ...
- 秋招JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等
轰轰烈烈的"金九银十"秋招季已经落幕,有人欢喜有人愁,不管你是喜是忧,学习总归是好的.这不,小编特地整理了一下秋招面试知识点(JAVA岗),一起分享出来给大家看看~ 第一部分 Ja ...
最新文章
- 腾讯云Ubuntu挂载硬盘空间
- 学习Kotlin(二)基本语法
- 房贷断供会有什么严重后果?
- 【iCore4 双核心板_ARM】例程二十三:LWIP_HTTP实验——网页服务器
- 天线发射功率计算公式_天线基本知识及应用―链路及空间无线传播损耗计算
- DICOM VR数据类型表
- PS—制作 抖音 图标
- uva 10099 The Tourist Guide nyoj 1019 亲戚来了【单个路线最大流【最短路算法】】
- [BZOJ4699]树上的最短路(最短路+线段树)
- 计算机局域网访问受限制,电脑本地连接受限制的处理方法
- 计算机学win7画图,详解使用画图工具的win7中的操作步骤
- 阿里“中供系”前世今生:马云麾下最神秘的子弟兵
- 科普一下,什么是网站系统的性能,可用性,可伸缩性,可扩展性?
- API 接口测试,用这个开源的工具准没错
- 十年沉浮,Web2 到 Web3 的转变之路
- 大数据如此火爆 如何看待大数据行业发展趋势
- Chromebook2013 由Fyde os 升级为Deepin v20.2.1 (一)
- Angular self study 4 - data entered by end user
- Win10 L2TP连接不上的解决办法
- Python脚本和C#的互相调用
热门文章
- Apache Payara:让我们加密
- java 解析gson_使用Java和Google GSON解析ESPN API
- AWS:启动安装了APOC的Neo4j实例
- fork join框架_Java 7:Fork / Join框架示例
- openshift s2i_对Openshift上的Play Framework 2应用进行故障排除
- spring mvc拦截器_Spring MVC拦截器示例
- jboss7.0.2_JBoss AS 7.0.2“ Arc”发布–使用绑定选项
- 欢迎使用Java 8之前要重温的10个JDK 7功能
- 流畅和稳定的API的Lambda
- ArrayList使用内存映射文件