Laravel Redis分布式锁功能实现--setNx+过期时间Lua脚本解决方案_挑灯夜读的博客-CSDN博客_lua setnx过期时间


本站和网页 https://blog.csdn.net/a18827547638/article/details/107345465 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Laravel Redis分布式锁功能实现--setNx+过期时间Lua脚本解决方案_挑灯夜读的博客-CSDN博客_lua setnx过期时间
Laravel Redis分布式锁功能实现--setNx+过期时间Lua脚本解决方案
挑灯夜读
于 2020-07-14 19:22:50 发布
2220
收藏
分类专栏:
laravel
Redis
文章标签:
laravel
Java Redis 分布式锁
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a18827547638/article/details/107345465
版权
laravel
同时被 2 个专栏收录
3 篇文章
0 订阅
订阅专栏
Redis
3 篇文章
0 订阅
订阅专栏
在探索分布式锁的过程中,遇到很多坑点   1.redis的set方法不支持$redis->set(keys,args,["NX","EX"=>3])写法;   2.百度到redis驱动可以通过comand命令来使用一些redis原生命令,测试部分命令可行,但set(keys,args,["NX","EX"=>3])操作仍然不行   3.网上查到可以用$redis->eval()执行LUA脚本来实现原子性操作,本地测试$redis->eval($lua,['ceshi',1,5],1);代码报错,怀疑是自己写法错误,找遍了网上资料,都是这样写的;   4.山穷水尽之时,只能跟着代码找问题,最终在predis源码中找到问题所在,正确用法$redis->eval($lua,1,'ceshi',1, 3)   总结: 网上的资料不一定都是对的,自己深入源码不仅能查到问题的本质,对自己的技能也是一个很好的提升
最终代码:
$script &#61; <<<SCRIPT
return redis.call('SET', KEYS[1], ARGV[1], 'NX', 'EX', ARGV[2])
SCRIPT;
$res &#61; Redis::eval($script, 1,$cahce_key, 1, $limit_time);
挑灯夜读
关注
关注
点赞
收藏
打赏
评论
Laravel Redis分布式锁功能实现--setNx+过期时间Lua脚本解决方案
在探索分布式锁的过程中,遇到很多坑点 1.redis的set方法不支持$redis->set(keys,args,["NX","EX"=>3])写法; 2.百度到redis驱动可以通过comand命令来使用一些redis原生命令,测试部分命令可行,但set(keys,args,["NX","EX"=>3])操作仍然不行 3.网上查到可以用$redis->eval()执行LUA脚本来实现原子性操作,本地测试$redis->eval($lua,['ceshi',1,5]...
复制链接
扫一扫
专栏目录
RedisSet缓存List数据并设置过期时间&mdash;&mdash;Lua实现
不是很懂
04-22
2万+
RedisSet缓存List数据操作并设置过期时间&mdash;Lua脚本实现
工作中自己开发需要,现有的工具不能满足,于是自己定制了一套
批量缓存List内容数据,而不是将整个List作为一个value缓存,并且删除原有的数据,同时设置过期时间,
定义方法内容
/**
* @description 批量缓存List数据,并且删除原有的数据,同时设置过期时间
* @param clazz List的数据泛型
* @param duration 过期时间 单位/秒
* @a
Laravel框架使用Redis的方法详解
12-19
本文实例讲述了Laravel框架使用Redis的方法。分享给大家供大家参考,具体如下:
安装
laravel中使用redis首先需要你通过 Composer 安装 predis/predis 包:
composer require predis/predis
配置
redis的配置文件是:config/database.php
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('
评论 2
您还未登录,请先
登录
后发表或查看评论
详解Laravel中如何使用Redis分布式锁+代码实例
最新发布
qq_29701691的博客
11-07
136
一淘模板给大家介绍关于在laravel中如何使用Redis分布式锁的(原子锁 lock block release),希望对需要的朋友有所帮助!get 方法可以接收一个闭包。在闭包执行之后,Laravel 将会自动释放锁。
Redis分布式锁的正确实现,SET NX 并设置超时时间
热门推荐
qq_35042060的博客
08-16
2万+
错误示范
之前看过很多redis实现分布式锁基本都是在程序中使用时间戳进行加锁超时判断,然而这种方法并不能在高并发情况避免误删;以下是错误示范
错误示范
public boolean lock(String key, String value) {
//如果key值不存在,则返回 true,且设置 value
if (redisTemplate...
shell脚本&mdash;&mdash;检测SSL证书过期时间
weixin_33743661的博客
06-01
1444
2019独角兽企业重金招聘Python工程师标准>>>
...
redis分布式锁实战(redis篇六)
qq_41133245的博客
10-29
121
1.典型互联网分布式秒杀方案
1.1 pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.o
Laravel 实现redis分布式锁
code_nutter的博客
08-03
425
SETNX 是SET if Not eXists的简写。将 key 的值设为 value,当且仅当 key 不存在;若给定的 key 已经存在,则 SETNX 不做任何动作。从分布式锁的角度来说, 无论是单机模式、主从模式、哨兵模式、集群模式,其原理都是类同的。只是主从模式、哨兵模式、集群模式的更加的高可用、或者更加高并发。所以,接下来先基于单机模式,基于Jedis手工造轮子实现自己的分布式锁。Redis分布式锁机制,主要借助setnx和expire两个命令完成。...
Laravel Redis操作大全
Lansonli(蓝深李)的博客
09-30
3048
1,普通得set/get操作,set操作,如果键名存在,则会覆盖原有得值
$redis = app("redis.connection");
$redis->set('library' , 'phpredis');//存储key为library ,值phpredis得记录
$redis->get("library");//获取key为library得记录值
set/get 多个key-value
$mkv = array(
"user...
Laravel 大将之 Redis 模块
weixin_34409822的博客
06-07
176
简介
Redis模块负责与Redis数据库交互,并提供Redis的相关API支持;
Redis模块提供redis与redis.connection这两个服务;redis.connection服务提供redis连接对象;redis服务提供Illuminate\Redis\RedisManager对象,负责与Redis打交道的这部分管理工作;...
laravel redis五种简单数据类型的使用
hshshshshs1的专栏
12-29
1614
了解redis
redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
redis的五种数据类型
Redis一共支持五种数据类:string(字符串),hash(哈希),list(列表),set(集合,无序的)和zset(sorted set有序集合)。
redis的版本为5.3.4
String类型的存储以及读取
1.长时间存储,没有过期时
laravel使用redis的分布式锁
HoeWang的博客
01-19
478
laravel的缓存类的store的redis实现,位于命名空间
Illuminate\Cache\RedisStore
其中实现了LockProvider,可获取锁实例,锁实例为Illuminate\Cache\RedisLock类的实例,RedisLock类是Illuminate\Cache\Lock抽象类的实现
调用方法get()获取锁时(RedisLock->get()),首先调用$this->acquire(),具体代码为
public function acquire()
Redis分布式锁&mdash;SETNX+Lua脚本实现篇
niceyoo的博客
10-28
2379
前言
平时的工作中,由于生产环境中的项目是需要部署在多台服务器中的,所以经常会面临解决分布式场景下数据一致性的问题,那么就需要引入分布式锁来解决这一问题。
针对分布式锁的实现,目前比较常用的就如下几种方案:
基于数据库实现分布式锁
基于Redis实现分布式锁 【本文】
基于Zookeeper实现分布式锁
接下来这个系列文章会跟大家一块探讨这三种方案,本篇为Redis实现分布式锁篇。
Redis分布式环境搭建推荐:基于Docker的Redis集群搭建
Redis分布式锁一览
说到 redis 锁,能
**Java有哪些悲观锁的实现_Redis 分布式锁的正确实现方式(Java 版)
weixin_39579127的博客
11-20
139
点击上方&ldquo;Java基基&rdquo;,选择&ldquo;设为星标&rdquo;做积极的人,而不是积极废人!源码精品专栏原创 | Java 2020超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析作业调度中间件 Elastic-Job 源码解析分布式事务中间件 ...
java redis设置过期时间_Redis分布锁原理简介和实现过程
weixin_39957951的博客
11-20
895
前言这篇文章介绍下如何实现redis来实现分布式锁及原理简介
原理简介redis 获取分布式锁使用lua脚本的命令setnxpexpire(提供了毫秒的过期时间,expire提供了基于秒的过期时间)lua脚本(保证脚本中的命令被一起执行 不间断)redis删除锁使用lua脚本的命令先执行get判断获取的值是否是自己设置的如果是的话 则执行del操作lua脚本(保证脚本中的命令被一起执行 不间断)流...
Laravel 8使用redis(string)存储接口数据并设置过期时间
zhmoon的博客
11-30
1820
接口请求服务端获取数据,服务端请求数据库,如果存redis或者其他缓存可以缓解数据库压力。
示例代码:
public function getImg()
//判断redis中是否有数据
if (Redis::get('image')){
//如果有,转成数组格式
$data=json_decode(Redis::get('image'),true);
}else{
//如果没有,查数据库
laravel之redis
qq_37873416的博客
10-26
438
简介
Redis模块负责与Redis数据库交互,并提供Redis的相关API支持;
Redis模块提供redis与redis.connection这两个服务;redis.connection服务提供redis连接对象;redis服务提供Illuminate\Redis\RedisManager对象,负责与Redis打交道的这部分管理工作;
配置项
以下是笔者的示例;
de
关于Redis在Laravel中设置过期时间的使用纠正
lantinmaker的博客
06-06
1万+
(String)过期时间正确设置方法:Redis::setex( $key , $expired_at , $value );$expired_at 就是过期时间,单位秒
【laravel+redis】分布式锁的实现
alwayszmj
07-15
944
laravel 原子锁
Laravel中redis加分布式锁
qq_32535455的博客
10-21
203
使用Redis的setnx可以实现一个分布式锁
//加redis锁
$token_operation = Uuid::uuid1();
$lock_operation_name = "redis_lock" . $user->id;
$lock_operation = Redis::set($lock_operation_name, $token_operation, "nx", "ex", 5);
$.
laravel redis存数组并设置过期时间
weixin_30815469的博客
06-02
2896
$data = [
'zoneList'=>$zoneList,
'eqList' => $eqList,
'mdateList' => $mdateList
];
Redis::setex($cacheKey, 300, serialize($data));
使用setex命令一条命令就可以完成,不建议用set和expire命令,两条...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
挑灯夜读
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
64
原创
6万+
周排名
4万+
总排名
45万+
访问
等级
2533
积分
35
粉丝
131
获赞
34
评论
491
收藏
私信
关注
热门文章
JSON.parseObject的几种用法
244177
FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
27058
Maven聚合项目-IDEA-各模块间不能引用问题的解决方法
16043
java的JsonObject对象提取值
10480
tcpdump linux抓http请求头
7801
分类专栏
spring组件
2篇
spring
1篇
Rabbitmq
1篇
zookeeper
1篇
docker
5篇
架构
1篇
VirtualBox
3篇
Go语言学习笔记
3篇
beego
1篇
hyperf
1篇
面试知识点
1篇
Redis
3篇
nginx
4篇
composer
1篇
elasticsearch
2篇
swoole
3篇
laravel
3篇
前端
1篇
消息队列
2篇
牛人
1篇
java
57篇
PHP
28篇
Linux
18篇
自定义注解
1篇
git
2篇
网络
2篇
环境
7篇
shell
1篇
mysql
9篇
流程
2篇
Go
6篇
最新评论
Go 搭建一个简单 WebSocket
Surperw985:
你这个包的下载命令是啥
Laravel Redis分布式锁功能实现--setNx+过期时间Lua脚本解决方案
Shaw同学:
$redis->set($key, $value, 'nx', 'px', 60);
PHP call_user_func理解
Z_Y_X_0:
la ji
FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
Trouble Maker_chen:
复杂情况下怎么获取例子里的studentName啊,不知道怎么办了,好难受
java的JsonObject对象提取值
charmfeel:
很棒,特别有用,解决了我的问题,感谢分享。
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
MySQL事务隔离级别中可重复读与幻读
Spring事务基础
组件分享之Java组件——springboot各种使用demo大合集
2022年13篇
2021年13篇
2020年28篇
2019年35篇
2018年54篇
目录
目录
分类专栏
spring组件
2篇
spring
1篇
Rabbitmq
1篇
zookeeper
1篇
docker
5篇
架构
1篇
VirtualBox
3篇
Go语言学习笔记
3篇
beego
1篇
hyperf
1篇
面试知识点
1篇
Redis
3篇
nginx
4篇
composer
1篇
elasticsearch
2篇
swoole
3篇
laravel
3篇
前端
1篇
消息队列
2篇
牛人
1篇
java
57篇
PHP
28篇
Linux
18篇
自定义注解
1篇
git
2篇
网络
2篇
环境
7篇
shell
1篇
mysql
9篇
流程
2篇
Go
6篇
目录
评论 2
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
挑灯夜读
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值