redis分布式锁原理

举例子:秒杀方式看医生,一个人看5min

1.第一次只允许一个人直接进行来,X10:00:00进去了,setNX(roomid,now+5min),出来时间假如是10:05:00

2.时间到了10:05:00,3个人同时进来,需要去看墙上的钟表,一个人一个的看

A进入病房看到,看到钟表时间10:05:00,得到时间10:05:00,看完时候的时间是10:05:01

B进入病房看到,看到钟表时间10:05:01,得到时间10:05:01,看完时候的时间是10:05:02

C进入病房看到,看到钟表时间10:05:02,得到时间10:05:02,看完时候的时间是10:05:03

最后发现A的时间和进来的时间一致,所以得到看病机会,看完的时间将是 10:10:00,如此循环。

redis原理:

1.setNX(roomid,now+5min),roomid不存在就进行设置,并且返回1,否则不进行设置,并返回0;

2.getset(roomid,time),同步,只能一个设置完成下一个才进行设置,也就是有先后,同时得到返回值,roomid对应的值,也就是上一个人设置留下的时间。对比为设置前的时间,一致的可以获得锁。

等待过期,下一轮的人可以进行设置

原文地址:https://www.cnblogs.com/longsanshi/p/8319029.html

时间: 2024-10-10 14:49:47

redis分布式锁原理的相关文章

redis分布式锁原理与实现

分布式锁原理 分布式锁,是控制分布式系统之间同步访问共享资源的一种方式.在分布式系统中,常常需要协调他们的动作.如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁. 使用setnx.getset.expire.del这4个redis命令实现 setnx 是『SET if Not eXists』(如果不存在,则 SET)的简写. 命令格式:SETNX key value:使用:只在键 k

Redis分布式锁的实现

来自 https://www.cnblogs.com/Eugene-Jin/p/10801260.html  1.概述 分布式锁一般有三种实现方式:1.基于数据库实现分布式锁:2. 基于缓存(Redis,memcached,tair)实现分布式锁: 3.基于Zookeeper实现分布式锁.本片博客将介绍基于缓存实现分布式锁,这里主讲分别针对Redis 2.6.12 之前版本和Redis 2.6.12 及之后版本分布式锁的实现. 2.基于Redis(Redis 2.6.12版本之前)分布式锁的实现

收藏慢慢看系列:简洁实用的Redis分布式锁用法

在微服务中很多情况下需要使用到分布式锁功能,而目前比较常见的方案是通过Redis来实现分布式锁,网上关于分布式锁的实现方式有很多,早期主要是基于Redisson等客户端,但在Spring Boot2.x以上版本中使用Redis时,其客户端库已经默认使用lettuce.所以本文将直接介绍在Spring Boot2.x以上项目中快速使用Redis分布式锁的功能的方法,希望能够更新你的知识库! Redis分布式锁原理概述 实际上Redis服务本身并不提供分布式锁这样的机制,但是作为全局Key-Valu

Redis分布式锁的实现原理

一.写在前面 现在面试,一般都会聊聊分布式系统这块的东西.通常面试官都会从服务框架(Spring Cloud.Dubbo)聊起,一路聊到分布式事务.分布式锁.ZooKeeper等知识. 所以咱们这篇文章就来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理. 说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了,非常的简便易用. 大家如果有兴趣,可以去看看Redisson的官网,看看如何在项目中引入Red

关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁

首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在jdk java.util 并发包中已经为我们提供了这些方法去加锁, 比如synchronized 关键字 或者Lock 锁,都可以处理. 但是我们现在的应用程序如果只部署一台服务器,那并发量是很差的,如果同时有上万的请求那么很有可能造成服务器压力过大,而瘫痪. 想想双十一 和 三十晚上十点分支付宝红

Redlock(redis分布式锁)原理分析

Redlock:全名叫做 Redis Distributed Lock;即使用redis实现的分布式锁: 使用场景:多个服务间保证同一时刻同一时间段内同一用户只能有一个请求(防止关键业务出现并发攻击): 官网文档地址如下:https://redis.io/topics/distlock 这个锁的算法实现了多redis实例的情况,相对于单redis节点来说,优点在于 防止了 单节点故障造成整个服务停止运行的情况:并且在多节点中锁的设计,及多节点同时崩溃等各种意外情况有自己独特的设计方法: 此博客或

Redis分布式锁实现

直接上代码: 1 package cn.wywk.yac.comm.redis; 2 3 import org.slf4j.Logger; 4 import org.slf4j.LoggerFactory; 5 6 import redis.clients.jedis.Jedis; 7 8 /** 9 * ClassName: redis分布式锁实现 <br/> 10 * date: 2017年2月17日 上午10:23:24 <br/> 11 * 12 * @author 134

RedLock.Net - 基于Redis分布式锁的开源实现

工作中,经常会遇到分布式环境中资源访问冲突问题,比如商城的库存数量处理,或者某个事件的原子性操作,都需要确保某个时间段内只有一个线程在访问或处理资源. 因此现在网上也有很多的分布式锁的解决方案,有数据库.MemCache.ZoopKeeper等等的方式. 这次,我们要学习的是一个基于Redis分布式锁的插件,RedLock.Net. 首先必须要有一个Redis服务来支持此分布式锁,其次就当然是要获取此插件了. 可以从Nuget中获取,也可以直接去Github下载   https://github

Memcached 和 Redis 分布式锁方案

分布式缓存,能解决单台服务器内存不能无限扩张的瓶颈.在分布式缓存的应用中,会遇到多个客户端同时争用的问题.这个时候,需要用到分布式锁,得到锁的客户端才有操作权限. Memcached 和 Redis 是常用的分布式缓存构建方案,下面列举下基于Memcached 和 Redis 分布式锁的实现方法. Memcached 分布式锁 Memcached 可以使用 add 命令,该命令只有KEY不存在时,才进行添加,或者不会处理.Memcached 所有命令都是原子性的,并发下add 同一个KEY ,只