![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 73
替罪的羊
笔记而已
展开
-
用Redis实现获取验证码,外加安全策略
用Redis实现获取验证码,外加安全策略原创 2024-04-25 14:57:43 · 424 阅读 · 0 评论 -
Redisson分布式锁,重试锁和锁续命的原理
获取当前时间,线程ID,尝试获取锁,判断锁失效后自动释放的时间是否等于-1,如果不等于,就用自己的锁释放时间,如果等于-1,异步调用tryLockInnerAsync,返回值是个Future,第一个参数是等待时间,第二个参数是锁释放时间,看门狗的默认30秒,第三个是时间单位,第四个参数是线程ID,这个方法内是个lua脚本,成功返回空,是否返回过期时间;如果锁已经释放了,计算剩余等待时间,判断剩余等待时间>0,开始循环,就可以重新获取锁,和上面一样,如果失败,同时上,但这里用的是信号量。会在等待内不断重试;原创 2024-04-28 15:12:14 · 1173 阅读 · 0 评论 -
Redis Zset的底层原理
当采用的是ZipList,慢慢添加元素,会往跳表转化,在zsetadd方法中做判断,具体逻辑是这样的,判断编码是不是ZipList,是的话判断当前元素是否存在,如果存在更新score分数;如果元素不存在,需要判断ZipList的长度、元素大小有没有超,如果超了,转为跳表。当元素数量不多时,HT和SkipList的优势不明显,而且更耗内存。元素数量大于最大entries,或每个元素都大于value字节,就采用哈希表+调表的结果,否则采用ZipList;因此,zset底层数据结构必须满足。原创 2024-04-29 14:52:01 · 566 阅读 · 0 评论 -
springboot使用lua脚本解决Redis分布式锁释放的问题
获取k的值,比较k的值是否一致,若一致就删除,不一致就返回0。2.springboot读取配置文件。放在resources目录下。用静态代码块,只加载一次。1.创建 lua文件。原创 2022-12-23 13:20:57 · 404 阅读 · 0 评论 -
基于Redis实现全局唯一ID
当用户抢购时,就会生成订单并保存到DB中,而订单表如果使用数据库自增ID就存在一些问题:id的规律性太明显受单表数据量的限制场景分析:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。场景分析二:随着我们商城规模越来越大,mysql的单表的容量不宜超过500W,数据量过大之后,我们要进行拆库拆表,但拆分表了之后,他们从逻辑上讲他们是同一张表,所以他们的id是不能一样的, 于是乎我们需要保证id的唯一性。原创 2023-02-16 15:47:57 · 187 阅读 · 0 评论 -
Redis-搭建分片集群
分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下:原创 2022-12-28 16:05:45 · 206 阅读 · 0 评论 -
Redis-搭建哨兵集群
这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。原创 2022-12-28 11:44:42 · 473 阅读 · 0 评论 -
Redis-主从集群
目录一.集群结构二.准备实例和配置1.创建目录2.恢复原始配置3.拷贝配置文件到每个实例目录4.修改每个实例的端口、工作目录5.修改每个实例的声明IP三.启动四.开启主从关系5.测试此篇 redis 目录 在 /usr/redis-6.2.4 ,版本即为 6.2.4。我们搭建的主从集群结构如图: 共包含三个节点,一个主节点,两个从节点。这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。原创 2022-12-28 09:48:27 · 222 阅读 · 0 评论 -
Redis缓存击穿问题及解决思路
缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。原创 2023-02-16 13:20:36 · 3230 阅读 · 7 评论