目录一、分布式锁是什么1、获取锁2、释放锁二、代码实例上面代码存在锁误删问题:三、基于SETNX实现的分布式锁存在下面几个问题1、不可重入2、不可重试3、超时释放4、主从一致性四、Redisson实现分布式锁1、pom2、配置类3、测试类五、探索tryLock源码1、tryLock源码尝试获取锁2、重置锁的有效期更新有效期3、调用lua脚本六、释放锁unlo ......
355
0
0
2023-04-27
目录固定窗口滑动窗口hash实现list实现漏桶算法令牌桶滑动日志总结限流是项目中经常需要使用到的一种工具,一般用于限制用户的请求的频率,也可以避免瞬间流量过大导致系统崩溃,或者稳定消息处理速率。并且有时候我们还需要使用到分布式限流,常见的实现方式是使用Redis作为中心存储。这个文章主要是使用Go+Redis实现常见的限流算法,如果需要了解每种限流算法的原 ......
287
0
0
2023-04-26
什么是限流?为什么要限流?限流,这个词其实并不陌生,在我们生活中也随处可见。做核酸时,工作人员会在核酸检测点的空地上摆放着弯弯曲曲的围栏,人们排着队左拐右拐的往前移动,其实这么做的目的就是限流!因为核酸检测的窗口是有限的,一下子进那么多人,没那么多空间让人们站下,就会造成拥挤,甚至会造成事故。所以需要限流!同样的,我们的应用程序也是类似的,任何系统它处理请求 ......
379
0
0
2023-04-26
目录更新缓存? 删除缓存?先更新缓存再更新数据库先更新数据库,再更新缓存先删除缓存再更新数据库先更新数据库,再删除缓存解决方案1. 重试2. 异步重试2.1 使用消息队列实现重试2.2 Binlog实现异步重试删除3. 延时双删总结Redis与MySQL双写一致性是指在使用缓存和数据库同时存储数据的场景下( 主要是存在高并发的情况),如何保证两者的数据一致性 ......
347
0
0
2023-04-22
本文实现Redis的协议层,协议层负责解析指令,然后将指令交给核心database执行echo database用来测试协议层的代码https://github.com/csgopher/go-redisRESP协议RESP是客户端与服务端通信的协议,格式有五种:正常回复:以“+”开头,以“\r\n”结尾的字符串形式错误回复:以“-”开头,以“\r\n”结尾 ......
323
0
0
2023-04-20
目录一、安装LUA二、lua语法简介1、注释1)单行注释2)多行注释2、关键字3、变量1)全局变量2)局部变量4、数据类型1)Lua数组2)字符串操作5、if-else6、循环1)for循环2)while循环3)break提前退出循环7、函数三、Java中执行Lua脚本1、字符串方式2、文件方式3、Luaj概述四、Redis + Lua(EVAL命令)1、E ......
412
0
0
2023-04-09
目录集群结构准备实例和配置启动创建集群测试集群结构分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下:这里我们会在同一台虚拟机中开启6个redis实例,模拟分片集群,信息如下:IPPORT角色192.168.150.1017001master192.168.150.10170 ......
398
0
0
2023-04-06
目录一、简介二、maven依赖三、编码实现3.1、application.properties3.2、Redis配置类3.3、监听器3.4、服务类3.5、工具类四、测试4.1、测试类4.2、单实例4.3、多实例结语一、简介本文今天主要是讲Redis中对过期key的监听,可能很多小伙伴不会,或者使用会出现一些不可思议的问题,比如在系统中设置了一个缓存,希望在缓 ......
328
0
0
2023-04-05
目录一、IDEA安装Redis插件二、IDEA连接Redis服务器IDEA中的Redis插件作为Redis的可视化工具,可以通过该插件连接Redis服务器,并进行增删改查操作。一、IDEA安装Redis插件1、点击 File->Setting2、点击Plugins3、在Browse Repositories中输入redis4、点击Redis插 ......
712
0
0
2023-04-04
目录前言使用依赖配置配置文件demo代码执行效果原理分析队列创建生产者消费者整个流程总结思考前言工作中常常会遇到这样的场景,如订单到期未支付取消,到期自动续费等,我们发现延迟队列非常适合在这样的场景中使用。常见的延迟队列的优秀实现有rabbitMQ的死信队列,RocketMQ的延迟队列等,但是了有时候项目没有特别的大,没有引入类似的消息中间件,但是了又遇到了 ......
375
0
0
2023-04-03
相信在日常开发中,基于 Redis 天然支持分布式锁,大家在线上分布式项目中都使用过 Redis 锁。本文主要针对日常开发中加锁过程中某些异常场景进行讲解与分析。本文讲解示例代码都在 https://github.com/wayn111/newbee-mall-pro 项目 test 目录下 RedisLockTest 类中。版本声明:Spring ......
366
0
0
2023-03-26
主流 I/O 模型阻塞IO、非阻塞IO、异步 IO 。BIO 模型同步阻塞 模型,一个客户单对应一个链接的处理线程缺点:1、IO 中如果进行 read 是阻塞操作,如果请求的链接操作不做任何操作,也会导致线程阻塞,浪费线程资源2、如果线程很多,会导致服务器压力增加,比如 C10K问题引用场景:BIO 方式运用数目比较小且固定的架构,这种方式对服务器资源要求比 ......
396
0
0
2023-03-24
接着上一篇继续说,上一篇主要的还是连接邮箱和发信测试,这次主要就是对于接口制作和测试了首先,按照先一篇的接着写SpringBoot 验证码生成+SMTP邮箱服务配置POM-Maven依赖引入 Spring Data Redis以及Pool连接池具体为什么我不用Jedis,主要是线程安全问题 <!--redis--> ......
337
0
0
2023-03-18
目录一、StringⅠ、set、get、append、strlen、existsⅡ、incr、decr、incrby、decrbyⅢ、getset、setnxⅣ、setex、ttlⅤ、mget、mset、msetnx二、ListⅠ、lpush、lpushx、lrangeⅡ、lpop、llenⅢ、lrem、lset、lindex、ltrim Ⅳ、li ......
409
0
0
2023-03-16
如果面试官问我:Redis为什么这么快?我肯定会说:因为Redis是内存数据库!如果不是直接把数据放在内存里,甭管怎么优化数据结构、设计怎样的网络I/O模型,都不可能达到如今这般的执行效率。但是这么回答多半会让我直接回去等通知了。。。因为面试官想听到的就是数据结构和网络模型方面的回答,虽然这两者只是在内存基础上的锦上添花。说这些并非为了强调网络模型并不重要, ......
401
0
0
2023-03-13