本文实例讲述了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实现防止大并发下二次写入的方法相关推荐

  1. redis主从读写分离replication复制数据+sentienl哨兵集群主备切换

    说明:最近公司在自己搭建了一套redis主从读写分离+sentinel哨兵集群主备切换,通过手工去搭建replication复制+主从架构+读写分离+哨兵集群+高可用redis集群架构 公司的已经搭建 ...

  2. 【重难点】【Redis 03】缓存雪崩、缓存穿透、缓存击穿、Redis 的内存过期策略、并发读写和双写

    [重难点][Redis 03]缓存雪崩.缓存穿透.缓存击穿.Redis 的内存过期策略.并发读写和双写 文章目录 [重难点][Redis 03]缓存雪崩.缓存穿透.缓存击穿.Redis 的内存过期策略 ...

  3. 缓存穿透、缓存雪崩、redis并发

    把redis作为缓存使用已经是司空见惯,但是使用redis后也可能会碰到一系列的问题,尤其是数据量很大的时候,经典的几个问题如下: (一)缓存和数据库间数据一致性问题 分布式环境下(单机就不用说了)非 ...

  4. Redis系列教程(七):Redis并发竞争key的解决方案详解

    Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题: 高并发架构系列:Redis缓存和MySQL数据一致性方案详解 如何解决Redis缓 ...

  5. Redis并发竞争key的解决方案详解

    1.Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿.缓存雪崩.缓存和数据一致性,以及今天要谈到的缓存并发竞争. 这里的并发 ...

  6. redis之读写分离

    写在前面 本文一起看下redis的读写分离架构. 1:为什么要读写分离 读写分离,即主库执行写请求,然后写的数据同步到从库,从库执行读请求,架构图如下: 一般读写分离带给我们的好处可能如下: 分担主库 ...

  7. Linux企业运维 6.6 -- Redis部署及主从切换、Redis+Mysql读写分离

    目录 Redis简介 redis的编译.安装 1.server1的redis配置 2.server2的redis安装 3.server3配置redis 三.redis主从复制 四.Sentine主从自 ...

  8. 秋招面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等

    轰轰烈烈的秋招季已经开始,有人欢喜有人愁,不管你是喜是忧,学习总归是好的.这不,小编特地整理了一下秋招面试知识点+答案(JAVA岗),一起分享出来给大家看看~ 需要完整版的 知识点+答案 的朋友可以  ...

  9. 秋招JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等

    轰轰烈烈的"金九银十"秋招季已经落幕,有人欢喜有人愁,不管你是喜是忧,学习总归是好的.这不,小编特地整理了一下秋招面试知识点(JAVA岗),一起分享出来给大家看看~ 第一部分 Ja ...

最新文章

  1. 腾讯云Ubuntu挂载硬盘空间
  2. 学习Kotlin(二)基本语法
  3. 房贷断供会有什么严重后果?
  4. 【iCore4 双核心板_ARM】例程二十三:LWIP_HTTP实验——网页服务器
  5. 天线发射功率计算公式_天线基本知识及应用―链路及空间无线传播损耗计算
  6. DICOM VR数据类型表
  7. PS—制作 抖音 图标
  8. uva 10099 The Tourist Guide nyoj 1019 亲戚来了【单个路线最大流【最短路算法】】
  9. [BZOJ4699]树上的最短路(最短路+线段树)
  10. 计算机局域网访问受限制,电脑本地连接受限制的处理方法
  11. 计算机学win7画图,详解使用画图工具的win7中的操作步骤
  12. 阿里“中供系”前世今生:马云麾下最神秘的子弟兵
  13. 科普一下,什么是网站系统的性能,可用性,可伸缩性,可扩展性?
  14. API 接口测试,用这个开源的工具准没错
  15. 十年沉浮,Web2 到 Web3 的转变之路
  16. 大数据如此火爆 如何看待大数据行业发展趋势
  17. Chromebook2013 由Fyde os 升级为Deepin v20.2.1 (一)
  18. Angular self study 4 - data entered by end user
  19. Win10 L2TP连接不上的解决办法
  20. Python脚本和C#的互相调用

热门文章

  1. Apache Payara:让我们加密
  2. java 解析gson_使用Java和Google GSON解析ESPN API
  3. AWS:启动安装了APOC的Neo4j实例
  4. fork join框架_Java 7:Fork / Join框架示例
  5. openshift s2i_对Openshift上的Play Framework 2应用进行故障排除
  6. spring mvc拦截器_Spring MVC拦截器示例
  7. jboss7.0.2_JBoss AS 7.0.2“ Arc”发布–使用绑定选项
  8. 欢迎使用Java 8之前要重温的10个JDK 7功能
  9. 流畅和稳定的API的Lambda
  10. ArrayList使用内存映射文件