redisson

ddd

瘦欲@ 提交于 2020-08-19 16:46:26
redis 学习问题总结 http://aperise.iteye.com/blog/2310639 ehcache memcached redis 缓存技术总结 http://aperise.iteye.com/blog/2296219 redis-stat 离线安装 http://aperise.iteye.com/blog/2310254 redis cluster 非ruby方式启动 http://aperise.iteye.com/blog/2310254 redis-sentinel安装部署 http://aperise.iteye.com/blog/2342693 spring-data-redis使用 http://aperise.iteye.com/blog/2342615 redis客户端redisson实战 http://blog.csdn.net/zilong_zilong/article/details/78252037 redisson-2.10.4源代码分析 http://blog.csdn.net/zilong_zilong/article/details/78609423 tcmalloc jemalloc libc选择 http://blog.csdn.net/u010994304/article/details/49906819

Redis分布式锁实战

霸气de小男生 提交于 2020-08-19 05:36:39
大家好,我是walking,感谢你打开这篇文章,请认真阅读下去吧。 今天我们聊聊redis的一个实际开发的使用场景,那就是大名鼎鼎的分布式锁。 啥是分布式锁? 我们学习 Java 都知道锁的概念,例如基于 JVM 实现的同步锁 synchronized,以及 jdk 提供的一套代码级别的锁机制 lock,我们在并发编程中会经常用这两种锁去保证代码在多线程环境下运行的正确性。但是这些锁机制在分布式场景下是不适用的,原因是在分布式业务场景下,我们的代码都是跑在不同的JVM甚至是不同的机器上,synchronized 和 lock 只能在同一个 JVM 环境下起作用。所以这时候就需要用到分布式锁了。 例如,现在有个场景就是整点抢消费券(疫情的原因,支付宝最近在8点、12点整点开放抢消费券),消费券有一个固定的量,先到先得,抢完就没了,线上的服务都是部署多个的,大致架构如下: 所以这个时候我们就得用分布式锁来保证共享资源的访问的正确性。 为什么要用分布式锁嗯? 假设不使用分布式锁,我们看看 synchronized 能不能保证?其实是不能的,我们来演示一下。 下面我写了一个简单的 springboot 项目来模拟这个抢消费券的场景,代码很简单,大致意思是先从 Redis 获取剩余消费券数,然后判断大于0,则减一模拟被某个用户抢到一个,然后减一后再修改 Redis 的剩余消费券数量

分布式概念简单了解:数据一致性、CAP、BASE、分布式事务、分布式锁

旧城冷巷雨未停 提交于 2020-08-17 09:55:18
分布式概念简单了解:数据一致性、CAP、BASE、分布式事务、分布式锁 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 今天对分布式相关的一些概念与理论进行学习。 1.集群与分布式 集群 :相同的应用部署在多台服务器。 分布式 :不同的应用部署在多台服务器。 1.数据一致性 在分布式环境中,为了提高系统整体性能,数据以多副本冗余机制存储,副本之间通过数据复制进行同步。 数据副本与数据复制必然引入新的问题:如何处理副本数据的一致性? 总的来说,无法找到一种能够满足所有分布式环境的一致性解决方案,很多时候要在系统性能与数据一致性之间权衡。 由此,分布式一致性常见以下三种一致性: 1.1.强一致性 强一致性 :数据写以后,任意时刻,所有数据副本中的数据都是一致的。 强一致性,也可以称为:原子一致性、线性一致性。 强一致性,是非分布式环境中主要被采用的一致性原则。 在非分布式环境中,数据可以集中存储,例如整个系统就一个数据库,这种情况下容易保证数据的强一致性。 在分布式环境中,数据存在多个副本,分布在不同的服务器上,数据副本之间的同步会经过网络通讯,这种情况下,很难保证强一致性。 1.2.顺序一致性 顺序一致性 :任何一次读都能读取到数据的最近一次写的数据,系统的所有进程的顺序一致,而且是合理的。 顺序一致性,其实本人接触也不多

不用找了,基于 Redis 的分布式锁实战来了!

十年热恋 提交于 2020-08-16 10:22:52
作者:菜蚜 my.oschina.net/wnjustdoit/blog/1606215 前言:在分布式环境中,我们经常使用锁来进行并发控制,锁可分为乐观锁和悲观锁, 基于数据库版本戳的实现是乐观锁,基于redis或zookeeper的实现可认为是悲观锁了。乐观锁和悲观锁最根本的区别在于线程之间是否相互阻塞。 那么,本文主要来讨论基于redis的分布式锁算法问题。 从2.6.12版本开始,redis为SET命令增加了一系列选项(set [key] NX/XX EX/PX [expiration]): EX seconds – 设置键key的过期时间,单位时秒 PX milliseconds – 设置键key的过期时间,单位时毫秒 NX – 只有键key不存在的时候才会设置key的值 XX – 只有键key存在的时候才会设置key的值 原文地址: https://redis.io/commands/set 中文地址: http://redis.cn/commands/set.html 注意: 由于SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。 这里简单提一下,在旧版本的redis中(指2.6.12版本之前),使用redis实现分布式锁一般需要setNX、expire、getSet

谷粒商城-2020.5月最新升级--基础+高级+高可用集群

倾然丶 夕夏残阳落幕 提交于 2020-08-14 10:51:07
项目采用SpringCloudAlibaba技术栈。由业务集群系统+后台管理系统构成,打通了分布式开发及全栈开发技能,包含前后分离 全栈开发、Restful接口、数据校验、网关、注册发现、配置中心、熔断、限流、降级、链路 追踪、性能监控、压力测试、系统预警、集群部署、持续集成、持续部署... 基础+高级+高可用集群 https://pan.baidu.com/s/1W05OkEh5APFRwQnlCfcGXg 提取码:tyld 156.缓存缓存使用-加锁解决缓存击穿问题.avi 157.缓存缓存使用-本地锁在分布式下的问题.avi 158、缓存-分布式锁分布式锁原理与使用.avi 159.缓存分布式锁-Redisson简介整合.avi 160.缓存分布式锁-Redisson-lock锁测试.avi 161.缓存-分布式锁-Redisson-lock看门狗原理-redisson如何解决死锁,avi 166、缓存分布式锁-缓存一致性解决.avi 167.缓存-SpringCache-简介(上) .avi .../.... 220.商城业务认证服务-OAuth2.0简介.avi 221.商城业务-认证服务-weibo登录测试avi 231.商城业务-认证服务-单点登录简介.avi 232、商城业务-认证服务补-框架效果演示avi 233.商城业务认证服务单点登录流程-1.avi 234

使用Redis实现分布式锁

丶灬走出姿态 提交于 2020-08-14 02:37:12
一.介绍   分布式锁,或者称为“全局锁”,在分布式环境中,保证锁只能被一个对象(或者成为“事务”)获取,经常出现在“避免数据重复处理”、“接口幂等”的场景。   下面介绍了Redis中两种分布式锁的实现方式。    二.setnx + expire组合 2.1命令介绍   使用setnx和expire命令组合实现,这两个命令用法如下: setnx key value expire key seconds   对于setnx来说,只有key不存在,或者已经过期,setnx才会成功(返回1),否则失败(返回0)。   expire可以用来对key的有效期进行设置,若不设置key的有效期,则默认为-1,表示一直有效; 2.2操作步骤   实现分布式锁的时候,方式很简单: 2.现有A、B两个线程尝试获取同一个全局锁,假设先接收到A的请求; 3.直接执行setnx命令,key为foo,value可以根据业务制定,比如A的名称或者某个特殊的值; 4.如果setnx加锁成功,那么使用expire去设置key的过期时间,防止一直不释放锁的情况出现; 5.加锁成功后,且设置过期时间成功后,执行自己的业务逻辑(获取到全局锁的逻辑),等待 锁自动过期释放 或者 手动删除(del命令) ; 6.如果setnx加锁失败,则根据自己业务逻辑进行其他操作(未获取到全局锁的逻辑)。 2.3释放锁存在的问题  

Redis分布式锁实战

为君一笑 提交于 2020-08-14 02:01:10
大家好,我是walking,感谢你打开这篇文章,请认真阅读下去吧。 今天我们聊聊redis的一个实际开发的使用场景,那就是大名鼎鼎的分布式锁。 啥是分布式锁? 我们学习 Java 都知道锁的概念,例如基于 JVM 实现的同步锁 synchronized,以及 jdk 提供的一套代码级别的锁机制 lock,我们在并发编程中会经常用这两种锁去保证代码在多线程环境下运行的正确性。但是这些锁机制在分布式场景下是不适用的,原因是在分布式业务场景下,我们的代码都是跑在不同的JVM甚至是不同的机器上,synchronized 和 lock 只能在同一个 JVM 环境下起作用。所以这时候就需要用到分布式锁了。 例如,现在有个场景就是整点抢消费券(疫情的原因,支付宝最近在8点、12点整点开放抢消费券),消费券有一个固定的量,先到先得,抢完就没了,线上的服务都是部署多个的,大致架构如下: 所以这个时候我们就得用分布式锁来保证共享资源的访问的正确性。 为什么要用分布式锁嗯? 假设不使用分布式锁,我们看看 synchronized 能不能保证?其实是不能的,我们来演示一下。 下面我写了一个简单的 springboot 项目来模拟这个抢消费券的场景,代码很简单,大致意思是先从 Redis 获取剩余消费券数,然后判断大于0,则减一模拟被某个用户抢到一个,然后减一后再修改 Redis 的剩余消费券数量

作为一个面试官,我想问问你Redis分布式锁怎么搞?

两盒软妹~` 提交于 2020-08-13 02:37:15
最强面试题推荐: 2020Java面试题及答案,命中率高达90% 总结一下加锁过程:首先选择一台机器,然后发送一段lua脚本,带有三个参数:一个是锁的名字(在代码里指定的)、一个是锁的时常(默认30秒)、一个是加锁的客户端id(每个客户端对应一个id)。然后脚本会判断是否有该名字的锁,如果没有就往数据结构中加入该锁的客户端id。 锁互斥机制 很简单,上面第一个if判断会执行“exists myLock”,如果发现myLock这个锁key已经存在了,就会进行第二个if判断,判断一下myLock锁key的hash数据结构中,是否包含客户端2的ID,但是明显不是的,因为那里包含的是客户端1的ID。 所以,客户端2会获取到pttl myLock返回的一个数字,这个数字代表了myLock这个锁key的剩余生存时间。比如还剩15000毫秒的生存时间。 此时客户端2会进入一个while循环,不停的尝试加锁。直到客户端1释放myLock这个锁。 锁时间自动延迟机制 客户端1加锁的默认时长是30秒,如果超过了30秒,客户端1还想持有这把锁该怎么办呢?机制如下: 只要客户端1一旦加锁成功,就会启动一个watch dog看门狗,他是一个后台线程,会每隔10秒检查一下,如果客户端1还持有锁key,那么就会不断的延长锁key的生存时间。 可重入加锁机制 如果客户端1已经持有这把锁了,还想加锁,该怎么办呢

如何设计高性能的分布式锁

落爺英雄遲暮 提交于 2020-08-12 15:19:02
什么是分布式锁? ​ 在 JVM 中,在多线程并发的情况下,我们可以使用同步锁或 Lock 锁,保证在同一时间内,只能有一个线程修改共享变量或执行代码块。但现在我们的服务都是基于分布式集群来实现部署的,对于一些共享资源,在分布式环境下使用 Java 锁的方式就失去作用了。 ​ 使用数据库实现一个分布式锁比较简单易懂,直接基于数据库实现就行了,不需要再引入第三方中间件,所以这是很多分布式业务实现分布式锁的首选。但是数据库实现的分布式锁在一定程度上,存在性能瓶颈,所以我推荐使用Redis。 Redis 实现分布式锁 ​ Redis 实现分布式锁的方式,是使用 SETNX+EXPIRE 组合来实现,在 Redis 2.6.12 版本之前,具体实现代码如下: public static boolean tryLock(Jedis jedis, String lockKey, String requestId, int expireTime) { Long result = jedis.setnx(lockKey, requestId);//设置锁 if (result == 1) {//获取锁成功 // 若在这里程序突然崩溃,则无法设置过期时间,将发生死锁 jedis.expire(lockKey, expireTime);//通过过期时间删除锁 return true; } return

小程序商城--商城APP--开源商城--星然云商城系统

老子叫甜甜 提交于 2020-08-12 08:49:51
项目简介 星然云商城是基于当前流行技术采用前后端分离商城系统,包含商城,会员,充值,购物车,退款,订单,付款等功能,更适合企业,个人二次开发; 项目开源地址: https://github.com/xrshop/xrshop_h5 项目官网地址: http://ds.judaixia.com 主要功能如下: ① 订单模块:下单、购物车、支付,发货、收货、评价、退款等 ② 配置模块:各种配置 ③ 用户模块:登陆、注册、会员卡、充值、购买等 ④ 商品模块:商品添加、规格设置,商品上下架等 ⑤ 其他等 部分功能截图如下: 技术选型: 后端使用技术 1.1 SpringBoot2 1.2 MyBatis-Plus 1.3 SpringSecurity 1.4 Redis 1.5 Quartz 1.6 Mysql 1.7 swagger 1.8 Lombok 1.9 Hutool 1.10 Mapstruct 1.11 Redisson 前端使用技术 2.1 TypeScript3 2.2 Vue2 2.2 Sass 2.2 VueCli3 2.2 WebPack4 2.2 Babel 2.2 Git 2.2 Nginx​ 来源: oschina 链接: https://my.oschina.net/u/4552122/blog/4464157