
Redis
文章平均质量分 89
金鳞踏雨
断剑重铸之日,就是归来之时。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redisson看门狗机制为什么比将锁设置成永久有效期更好?
使用看门狗机制相对于将锁设置为永久有效具有以下优点:(1)自动释放锁:看门狗机制能够自动在设定的超时时间内续期锁的有效期。这意味着,即使在锁持有者遇到故障、异常情况或忘记手动释放锁的情况下,锁也会在超时时间后自动释放。(2)鲁棒性和可靠性:使用看门狗机制可以提高系统的鲁棒性和可靠性。无论是由于系统故障、网络问题、进程崩溃还是其他异常情况,锁都能够在超时时间内得到释放,从而避免死锁和资源泄漏的问题。(3)降低人为错误风险:将锁设置为永久有效需要依赖手动的操作来释放锁。这增加了人为错误的风险。原创 2023-06-04 23:49:57 · 1604 阅读 · 11 评论 -
Redisson的看门狗机制究竟有什么用?
Redisson提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期,也就是说,如果一个拿到锁的线程一直没有完成逻辑,那么看门狗会帮助线程不断的延长锁超时时间,锁不会因为超时而被释放。默认情况下,看门狗的续期时间是30s,也可以通过修改 Config.lockWatchdogTimeout 来另行指定。另外Redisson 还提供了可以指定leaseTime参数的加锁方法来指定加锁的时间,但是一旦使用了这个参数看门狗机制就失效了(不会自动续期)原创 2022-12-08 03:10:32 · 2027 阅读 · 6 评论 -
Redisson之lock()和tryLock()的区别
lock() 与 tryLock() 的区别(1)返回值: lock() 是没有返回值的;tryLock() 的返回值是 boolean。(2)时机:lock() 一直等锁释放;tryLock() 获取到锁返回true,获取不到锁并直接返回false。(3)tryLock() 是可以被打断的,被中断的;lock是不可以。原创 2022-12-06 23:46:23 · 13363 阅读 · 0 评论 -
Redis的分布式锁问题(十)最强分布式锁工具Redisson及源码分析
Redisson解决了——不可重入,不可重试、超时释放、主从一致性的问题!!!Redisson要解决上述问题并不是那么容易的,如果我们自己实现很有可能会出一些问题!所以最好的办法就是使用市面上的一些框架来解决!什么是Redisson?Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务,其中就包含了各种分布式锁的实现。原创 2022-12-01 23:19:37 · 3077 阅读 · 0 评论 -
Redis的分布式锁问题(九)Redis + Lua 脚本实现分布式锁
如果脚本中的key、value不想写死,可以作为参数传递。key类型参数会放入KEYS数组,其它参数会放入ARGV数组,在脚本中可以从KEYS和ARGV数组获取这些参数。Lua脚本解决unLock业务流程获取锁中的线程标示判断是否与指定的标示(当前线程标示)一致如果一致则释放锁(删除)如果不一致则什么都不做原创 2022-11-22 16:38:22 · 2602 阅读 · 0 评论 -
Redis的分布式锁问题(八)基于Redis的分布式锁
当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。在传统单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或synchronized)进行互斥控制。但是在分布式系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机并发控制锁策略失效,为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁的由来。分布式锁的核心是实现多进程之间互斥,市面上的主流方案大致有3种——MySQL、Redis、Zookeeper原创 2022-11-21 23:43:26 · 763 阅读 · 0 评论 -
Redis的优惠券秒杀问题(七)在集群模式下的问题
通过加锁可以解决在单机情况下的一人一单安全问题,但是在集群模式下就不行了!!!系统部署在不同的服务器中,那它们的JVM是不一样的,而synchronized只能锁当前JVM中的线程,是不能操作其它JVM的!要解决这个问题,就必须要借助别的工具!——分布式锁就孕育而生!原创 2022-11-21 16:09:09 · 1321 阅读 · 0 评论 -
Redis的优惠券秒杀问题(六)超卖问题、一人一单问题
Redis的优惠券秒杀问题之超卖问题、一人一单问题!!!超卖问题是典型的多线程安全问题,针对这一问题的常见解决方案就是加锁!!!所以我们现在要研究是就是要加什么类型的锁?要怎么加锁?在哪里加锁?什么是一人一单问题?简单的来说就是模拟为了防止黄牛”屯“货而设计的,每一个用户ID,只能下一单!如下图,同一个用户下了很多单!!!这里使用”悲观锁"来实现!原创 2022-11-18 23:48:11 · 3261 阅读 · 0 评论 -
Redis的优惠券秒杀问题(五)全局唯一ID 以及 秒杀下单
我们要讲述的问题大致如下所示,根据黑马程序员视频教程,会分离出Redis关于秒杀问题的核心知识点进行讲解!平价券可以任意购买,而特价券需要秒杀抢购。订单的数据量一般很大,一天可能会有几百万,如果使用自增ID,就很难分库分表了!首先,我们依照黑马的项目来进行分析,在什么情况下要使用到这个全局唯一ID。如果使用自增的话,用户可以根据两笔订单的ID,来判断这段时间内订单的量。:优惠券的库存、开始抢购时间,结束抢购时间。:优惠券的基本信息,优惠金额、使用规则等。,秒内的计数器,支持每秒产生。原创 2022-11-16 17:10:16 · 891 阅读 · 0 评论 -
Redis持久化方式RDB 和AOF的实现原理、优缺点
RDB 是通过快照的方式来实现持久化的,也就是说会根据快照的触发条件,把内存里面的数据快照写入到磁盘, 以二进制的压缩文件进行存储。客户端执行一个数据变更的操作,Redis Server 就会把这个命令追加到 aof 缓冲区的末尾,然后再把缓冲区的数据写入到磁盘的 AOF 文件里面, 至于最终什么时候真正持久化到磁盘,是根据刷盘的策略来决定的。没有最好只有最合适,建议RDB 与 AOF一起用!!!原创 2022-09-15 23:31:24 · 527 阅读 · 0 评论 -
Redis的缓存问题(四)将redis常用操作封装成工具类
1. 将任意的Java对象序列化为json并储存在string类型的key中,并且可以设置时间。2. 将任意的Java对象序列化为json并储存在string类型的key中,并且可以设置时间,用于缓存击穿。3. 根据指定的key查询缓存,并反序列化为指定类型,利用的方式解决缓存穿透。4. 根据指定的key查询缓存,并反序列化为指定类型,利用解决缓存击穿。原创 2022-08-25 00:33:16 · 1328 阅读 · 1 评论 -
Redis的缓存问题(一)添加redis缓存与扩展
缓存就是数据交换的缓冲区(称作Cache),是存贮数据的临时地方,一般读写性能较高。先查询Redis,如果命中,直接将数据取出;反之未命中,则查询MySQL数据库,若有数据返回客户端,并且将其写入Redis缓存中。当请求进入Tomcat以后,以前是查询数据库,而数据库本身是存在磁盘中的,查询需要进行IO操作,耗时,会给数据库造成压力;但是当我们有了缓存,请求进入Tomcat以后,直接进入Redis,查到后将结果返回给前端,就减轻了后端的负载。基于内存,所以读写快!..................原创 2022-07-06 14:16:24 · 2564 阅读 · 1 评论 -
Redis的缓存问题(三)缓存穿透、缓存雪崩、缓存击穿
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。简单的来说,就是请求之后,发现数据不存在,就将null值打入Redis中。优点:缺点:分析:当请求第一次来时,数据库中没有该数据,数据库向Redis写入一个null;此时正好数据库中被插入了该数据,又有一个请求来访问,但是刚刚向Redis中插入的null来没有过期,就出现了不一致(该请求从Redis拿到的结果就是null,而数据库中其实是有实际数据的)当然我们也有许多的解决办法,例如:将TTL的时间设置的足原创 2022-07-06 10:58:52 · 1480 阅读 · 0 评论 -
Redis的缓存问题(二)缓存更新策略与实践
缓存的好处不言而喻,但是也带来了一系列问题。我们数据是保存在缓存(Redis)与数据库(MySQL)中,在使用缓存的时候,我们要如何保证数据的一致性?当我们对数据库数据进行修改时,而缓存没有及时的更新,那么程序中查询的结果就会有出入!如何解决?自然而然就有了缓存的更新策略。在企业中常用的更新策略大致有以下 3 种:内存淘汰:redis本身的事情,当redis内存快满了,它自身会部分数据剔除,但是该操作不可控。超时剔除:设置一个TTL过期时间(expire命令),到期就删除,但是一致性的强弱取决于TTL时间设原创 2022-07-07 12:11:48 · 1069 阅读 · 0 评论 -
Redis实现短信登入功能(二)Redis实现登入功能
(1)之前的生成验证码后,我们会将其存放在Session中,每一个不同的请求就会对应一个Session,它们的SessionID肯定是唯一的;而现在是存在Redis中,它的key肯定不能是简单的指定"code",所以我们使用手机号作为key,验证码作为value,这样保证key的唯一性。(2)登入注册的时候创建用户(已有用户),用户信息需要保存到Redis中,此时的key建议用一个随机的token(建议不要用手机号码,因为之后这个token会传入前端,有泄露风险!),value存放用户信息。所以这里返回..原创 2022-06-30 02:01:14 · 1403 阅读 · 0 评论 -
Redis实现短信登入功能(一)传统的Session登入
基于Session实现登入流程分步实现发送短信登入(1)发送短信验证码(2)短信验证码的登入(3)登入校验原创 2022-06-29 00:59:00 · 1162 阅读 · 5 评论 -
史上最全的Redis基础+进阶项目实战总结笔记
本章节是基于黑马程序员视频课程的学习笔记,其中涵盖项目实现、流程分析、各个方法的介绍、最后会带上完整的代码实现(gitee获取)!本章节会持续更新,于今日2022-6-28开始...本文完全依照黑马程序员课程目录,依次用Redis实现: Redis的简介与数据结构_面向鸿蒙编程的博客-优快云博客NoSQL就是Not only SQLRedis诞⽣于2009年全称是Remote Dictionary Server,远程词典服务器,是⼀个基于内存的键值型NoSQL数据库。Redis是⼀个key-value的数原创 2022-06-28 16:52:14 · 7442 阅读 · 2 评论 -
SpringBoot整合Redis
在Spring Data Redis 中提供了RedisTemplate工具类,其中封装了各种Redis操作。并且将不同的数据类型的操作API封装到了不同的类型里。如下所示: 配置application.yml文件编写测试这里注入RedisRemplate对象,并使用其封装的Redis的操作。结果如下: 我们刚刚将name的值设置为TL,现在我们使用shell命令查看但是奇怪的是查询的结果并不是TL而是之前插入的 “jack” 我们不妨使用 keys * 命令查看一下: 显然里原创 2022-06-27 01:52:57 · 738 阅读 · 0 评论 -
Java操作Redis以及Redis线程池的用法
在Redis官网中提供了很多语言的客户端:Redis官网所以我们大致是要了解3种客户端 Jedis、lettuce、Redisson其中Spring帮我们做了整合,将Jedis与lettuce进行了封装成了它特有的Spring Data Redis至于Redisson是用在分布式的场景中,在学习分布式锁的时候小伙伴可以自行去了解一下,这里不做赘述。建立连接、编写测试方法、释放资源注意: 在Junit5中使用 @BeforeEach注解替代了 在Junit4的@Before。表示原创 2022-06-26 03:25:23 · 2296 阅读 · 0 评论 -
Redis的简介与数据结构
NoSQL就是Not only SQLRedis诞⽣于2009年全称是Remote Dictionary Server,远程词典服务器,是⼀个基于内存的键值型NoSQL数据库。Redis是⼀个key-value的数据库,key⼀般是String类型,不过value的类型多种多样大致是5大基本类型,3大特殊类型。Redis为了方便我们学习,将操作不同数据类型的命令也做了分组Redis官网命令手册例如:我们可以筛选只看关于String类型的命令我们也可以在命令窗口查看命令指的是是部分数据类型的,都可以使用原创 2022-06-16 17:31:27 · 1028 阅读 · 0 评论 -
Ubuntu上安装Redis6.0 与 Redis简单命令
首先从官网上下载redis-6.2.7.tar.gz假设先下载到/usr/local这样子就从官网上将redis的压缩包下载下来了然后解压,再进入redis-6.2.7的目录里注意接下来要用到C进行安装,大家可以自行检查一下是否在Ubuntu上由安装gcc如果有出现如下类似的结果,说明有安装过gcc,否则大家需要自行安装gcc 先确认一下自己是不是进入了redis-6.2.7的目录,如果是执行如下命令:命令执行完成后,在shell框中,使用如下命令,代表前台启动redis出现原创 2022-06-14 15:15:16 · 1556 阅读 · 0 评论 -
Redis是单线程还是多线程?为什么效率这么高?
Redis确实是单线程的,但是严格的说Redis并不是全面单线程的!!!原创 2022-06-14 10:45:25 · 1292 阅读 · 0 评论