
redis
文章平均质量分 67
SHENKEM
跳出舒适区
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
redis延时双删,为什么第一次删除
DBCacheClientDBCacheClient延迟时间需覆盖:- 主从同步耗时- 并发读请求处理时间1. 第一次删除缓存(DEL key)2. 更新数据库(UPDATE)3. 延迟后第二次删除(DEL key)确保更新数据库前,缓存已被清除,强制后续读请求回源到数据库获取最新值。最终一致性方案:订阅数据库Binlog(如Canal)自动更新缓存。从库未同步最新数据时,读请求可能读取到旧值并回填缓存。线程B在A更新数据库后但未删除缓存前,读取了旧缓存。由于缓存已被删除,读请求会从数据库加载。原创 2025-06-29 22:23:55 · 373 阅读 · 0 评论 -
redisson看门狗实现原理
/ 默认 10 秒(30s / 3)锁的过期时间,防止业务逻辑执行时间超过锁的持有时间,导致锁提前释放而引发并发问题。// 4. 执行 Lua 脚本,延长锁的过期时间。// 3. 检查锁是否仍被当前线程持有。// 如果未指定 leaseTime,则启动 Watch Dog。当线程获取锁后,如果业务执行时间超过锁的过期时间(如设置的。检查一次锁的状态,并重置锁的过期时间(续期至 30 秒)。// 2. 创建定时任务,每 10 秒执行一次。// 设置默认过期时间(30秒)// 1. 获取当前线程的锁信息。原创 2025-06-29 17:58:13 · 871 阅读 · 0 评论 -
redis setnx及版本关系
接口方法。原创 2025-04-24 09:44:14 · 356 阅读 · 0 评论 -
redis client.ttl(key)
对应 Redis 的命令:bash复制下载TTL key。原创 2025-04-23 18:06:45 · 929 阅读 · 0 评论 -
redis close+连接参数设置+并发情况风险分析
如果并发很高,每次查询都需要获取连接查询,并发几万的情况下,需要设置很大吗,如果设置比如200,每次查询完成后,可以及时释放连接吗。原创 2025-04-23 12:09:42 · 284 阅读 · 0 评论 -
redis cluster 主节点挂了,如何保证消息不丢失
在 Redis Cluster 中,确保数据不丢失的关键是使用可靠的持久化机制(如 AOF),保证主从节点的数据同步,并确保故障转移机制正常工作。在主节点挂掉并切换到从节点时,如果从节点已经同步了足够的数据,数据不会丢失。但如果同步延迟较高或从节点未完全同步主节点的数据,可能会丢失部分消息。因此,通过配置合理的同步策略、增加从节点数量以及使用合适的持久化机制,可以显著降低数据丢失的风险。原创 2025-01-06 22:45:50 · 1165 阅读 · 0 评论 -
【redis】JAVA中的opsForHash如何设置过期时间
在网络上搜这个问题的时候,弹出来的要么都是说redis设置TTL的和实现过期的原理(谁关心这个),要么就是说用opsForValue来代替(实测,能代替个鬼)。最后是用redisDesktopManage手动设置TTL的时候,得到启发,工具既然能设置,那么代码一定有办法,仔细看了方法,这就找到了。原文链接:https://blog.youkuaiyun.com/lhjllff12345/article/details/126786999。//设置过期时间600秒。转载 2023-08-02 15:02:20 · 2820 阅读 · 0 评论 -
集群模式下的消息一致性问题
caffeine缓存一致性问题转载 2022-11-29 14:21:00 · 623 阅读 · 0 评论 -
聊聊分布式锁的多种实现!
分布式锁实现方案转载 2022-11-10 17:16:23 · 186 阅读 · 0 评论 -
redis 的线程模型
一、redis 的线程模型#redis 内部使用文件事件处理器file event handler,它是单线程的,所以redis才叫做单线程模型。它采用IO多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。文件事件处理器的结构:多个 socket IO 多路复用程序 文件事件分派器 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)线程模型多个 socket 可.转载 2021-12-17 14:27:45 · 1579 阅读 · 0 评论 -
redis 的线程模型
文件事件处理器(file event handler)Redis 基于 Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler)文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套接字关联不同的事件处理器。当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作时, 与操作相对应的文件事件就会产生, 这时文件事转载 2021-12-17 14:26:02 · 112 阅读 · 0 评论 -
简单记录redis数据类型及使用场景
如上图效果 SortedSet 实现分页,排序 添加元素:ZADD ZADD key sorce(排序字段) number(基金代码) 总量:ZCARD key 分页及排序:升序 ZRANGE key start stop 降序 ZREVRANGE KEY start stop 其他命令 取某个成员分值 ZSCORE key number 取某个成员排名 ZRANK key num...原创 2021-12-15 10:41:47 · 1126 阅读 · 0 评论 -
删缓存,数据库更新谁先执行,及延时双删
先操作哪个,主要问题不是其中一个执行失败的问题先删除缓存,再更新数据库:存在主要问题不是更新数据库失败,导致读到老数据,是并发情况下删除缓存后,立刻读库,此时库数据还没更新,读到了老数据,又写入了缓存,导致以后所有人读到都是缓存中错误数据先更新数据库,再删除缓存:存在主要问题是,更新数据库后,还没删除缓存,导致部分人读到了缓存中老数据,当缓存删除后,就可以从数据库读取正确数据,缓存也就正确,以后大部分人读到正确数据。...原创 2021-11-24 15:25:11 · 1732 阅读 · 0 评论 -
Redis 的字符串是这样实现的…
本篇会讲以下内容: Redis字符串的实现 Redis字符串的性能优势 Redis字符串的实现Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的就是为了提升速度,提升性能,可以看出Redis为了高性能也是煞费苦心。Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS1.SDS 代码结构struct sdshdr{ // 记录已使用长度 int len;转载 2021-11-04 09:58:03 · 143 阅读 · 0 评论 -
Redis由分布式锁造成的重大事故
前言基于Redis使用分布式锁在当今已经不是什么新鲜事了。本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案。背景:我们项目中的抢购订单采用的是分布式锁来解决的。有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了!要知道,这个地球上飞天茅台的稀缺性啊!!!事故定为P0级重大事故...只能坦然接受。整个项目组被扣绩效了~~事故发生后,CTO指名点姓让我带头冲锋来处理,好吧,冲~事故现场经过一番了解后,得知这个抢购活动接口以前从来没有出现过这种情况,但是这转载 2021-11-03 15:18:07 · 161 阅读 · 0 评论 -
redis实现排行查询及排序及分页
需求分析如上图,app实现基金经理的查询,可根据年化回报率,综合得分,升序或降序排列,可下拉刷新,即实现分页效果。生产数据24000左右,不算大,但是app查询要求响应速度,不能查询表,可以把数据放到缓存中,查询缓存。怎么存,选择什么数据结构?需要排序,可以选择有序集合zsetZADD key score member [[score member] [score member] ...]key:基金的keysorce:回报率或综合评分member:基金编码除此之外...原创 2021-11-03 14:17:57 · 3376 阅读 · 1 评论 -
Docker 基础 ( 二十 ) 部署Redis集群,问题记录
Docker 基础 ( 二十 ) 部署Redis集群 - 简书一,问题1. -bash: redis: command not found2. Could not connect to Redis at 127.0.0.1:6379: Connection refused3. 127.0.0.1:6379> cluster infocluster_state:fail(20200916 Solved)Docker||redis-cli Could not connect原创 2021-10-25 16:11:25 · 1189 阅读 · 0 评论 -
部署redis集群
实战:部署redis集群#首先创建redis网络[root@node1 docker]# docker network create --subnet 172.38.0.0/16 redis3c72a2b7dd46f17816f590b4d159b4c75ec4979c0fac8551b8b8a9868c7365db[root@node1 docker]# docker network lsNETWORK ID NAME DRIVER转载 2021-10-22 09:48:49 · 210 阅读 · 0 评论 -
Redis-槽道原理
Redis ClusterRedis3.0之后,节点之间通过去中心化的方式提供了完整的sharding(分片)、replication(复制)、failover解决方案,称为 Redis Cluster。1、所有redis节点(包括主和从)彼此互联(两两通信)。2、集群中的高可用逻辑,通过主节点的过半选举实现主从替换。3、客户端与redis-cluster连接,无需再关心分片的计算,客户端不在关心分片的计算逻辑,内部分发分布式数据(内部有分片计算逻辑),客户端将key交给redis节点后,集群内部转载 2021-10-21 16:52:24 · 392 阅读 · 0 评论 -
Redisson + Lettuce实现
Redis 之 客户端框架比较:Jedis,Redisson,Lettuce三者区别参考:Redis 客户端 Jedis、lettuce 和 Redisson 对比 - 程序员自由之路 - 博客园Redis 之 客户端框架比较:Jedis,Redisson,Lettuce - 如梦灬遗忘 - 博客园redis比较推荐用法是:Redisson + LettuceRedisson:主要用分布式锁Lettuce:redis的基本功能,各种类型的数据类型的操作依赖如下:<de原创 2021-10-15 14:39:08 · 4990 阅读 · 8 评论 -
更新数据,删除缓存,更新数据库谁先执行
1.先更新数据库,再删除缓存2.先删除缓存,再更新数据库答案:方案1方案2存在问题查询与更新并发,更新操作先删除了缓存,还未更新数据库,查询操作未取到缓存,直接查询了数据库,这时候数据库还未更新,取到了脏数据,然后把脏数据放到了缓存,后续请求取到都是脏数据。方案1查询与更新并发,更新操作,数据库执行成功,但缓存未删除,此时进来查询的走缓存,取到了脏数据,但是等删除缓存也执行完成,后面的请求就会取数据库正确的数据,再放入缓存,这样后续的请求,取到的数据都是正确数据。分布式系统知识点原创 2021-09-17 12:55:20 · 668 阅读 · 0 评论 -
redis双写一致性问题
1,更新缓存,更新数据库2,更新数据库,更新缓存3,删除缓存,更新数据库4,更新数据库,删除缓存(推荐)原创 2021-09-09 23:23:22 · 127 阅读 · 0 评论 -
读redis->双重检测同步锁->防止Redis缓存击穿
一般用redis做数据缓存,查询缓存时先查询缓存,没有再查下数据,然后更新缓存。这里会存在一个问题:并发情况10000个用户查询缓存,缓存失效,那么10000个用户都怼到数据库了,会造成很大压力,也就是缓存击穿,不是穿透。击穿与穿透区别:穿透:缓存无(压根没有),数据库无击穿:缓存无(缓存失效),数据库有相同点:大量请求怼到数据库按理说:10000请求,都判断无缓存,那么如果只有一个线程能继续执行,(加锁)继续取读到数据库数据,然后更新缓存,这时其他线程等待。之后,其他线程就可以读取原创 2021-09-09 23:17:05 · 681 阅读 · 0 评论 -
Zookeeper 和redis做分布式锁区别
redis1.保证最终一致性,副本间的数据复制是异步进行,(set写 get读,redis是读写分离架构,存在主从从不延迟的情况),而且,主从切换可能导致部分数据,没有复制过去,导致数据丢失,所以要求强一致性时,推荐zk.2.Redis各集群的方法响应时间为最低,随着并发量和业务数量上升其响应时间会明显上升,但是极限qps,可以达到最大基本无异常。ZK1.也无法保证完全一致性,其他原理是使用临时顺序节点,节点生命周期在client与集群的Session结束时结束。因此某个client节点存在原创 2021-09-06 23:12:26 · 215 阅读 · 0 评论 -
redis分布式锁
Redisson sexNt1.原子性:key,过期时间保证原子性,中间服务器挂了,无法释放锁2.解铃还须系铃人,谁加锁,谁解锁,锁过期,其他程序进入过期时间10s,业务耗时15s,A程序加锁,剩余5s内,B程序进入,释放了A程序锁。思路:加锁时,生成一个随机数value,解锁时判断value是否与加锁时value是否一致,是,才解锁。应用场景:定时任务3.看门狗,watch dog,锁过期,其他程序进入(同2,另外一个问题)过期时间30s,每隔10s续更新时间为30,比如程序执原创 2021-09-06 22:09:44 · 144 阅读 · 0 评论 -
Redis只能做缓存?太out了!
Redis只能做缓存?太out了!https://mp.weixin.qq.com/s/DgIB3e1_nS1mr2_RszDapA芋道源码前天以下文章来源于小姐姐味道,作者小姐姐养的狗小姐姐味道.不羡鸳鸯不羡仙,一行代码调半天点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天10:33更新文章,每天掉亿点点头发...源码精品专栏 原创 | Java 2021超神之路,很肝~ 中文详细注释的开源项目 ...转载 2023-04-13 16:03:45 · 164 阅读 · 0 评论 -
使用lua实现redis分布式锁
Lua官网http://doc.redisfans.com/script/eval.html问题重现:预约功能,用jemter测试,30个不同用户同时预约,2个用户重复发送请求,即重复发送消息场景,结果导致重复消费避免重复消费方式1.如第6行,重复原因:第10行,业务逻辑耗时比较长,还没执行第11行,导致6行,执行通过,重复的数据都进来了2.如第5行+12行,高并发下,加分布式锁,重复请求(具体场景是什么),只有一个能执行业务逻辑。这样不够,6行还是要保留,保证幂等。分析:分布式锁只原创 2021-05-18 13:45:44 · 375 阅读 · 0 评论 -
RedisTemplate和StringRedisTemplate在项目中应用
一,应用场景:项目启动时,需要进行初始化,初始化内容为redis缓存,目的是数据提前加载到缓存,而不是在项目中查询用到了,再去查询数据库,初始化缓存初始化实现逻辑:清空缓存,查询数据库,初始化redis及本地缓存。二,实现项目中redis存储的数据类型有两种,一种是String,一种是对象类型数据String类型数据,使用StringRedisTemplate类对象类型数据,用...原创 2019-10-11 17:00:34 · 675 阅读 · 0 评论 -
你应该知道的Redis过期键和过期策略
今天,我和大家分享一篇关于 Redis 有关过期键的内容,主要有四个内容:1. 如何设置过期键2. 如何取消设置的过期时间3. 过期键的过期策略是怎样的4. RDB、AOF 和复制对过期键的处理又是怎样的1. 设置键的过期时间redis 一共有 4 个命令来设置键的生存时间(可以存活多久)或过期时间(什么时候被删除)1. expire :将 key 的生存时间设置为 t...转载 2019-07-31 10:04:29 · 271 阅读 · 0 评论 -
为什么说Redis是单线程的?
https://mp.weixin.qq.com/s?__biz=MzUxOTAxODc2Mg==&mid=2247483796&idx=2&sn=e7744c95c42ce629038c1257d9b73b0e&chksm=f98141f1cef6c8e724ccbe7ec60c64deb47a02629f3267512d08b9da782c92cc7a0885f...转载 2019-03-05 13:44:54 · 179 阅读 · 0 评论 -
关于RedisTemplate和StringRedisTemplate
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.youkuaiyun.com/notsaltedfish/article/details/75948281最近在开始在学习Redis以及如何在Java当中去使用Redis,Redis是什么我这里就不说了。我主要想说的是Redis和Java当中Spring结合起来的...转载 2019-10-11 16:05:07 · 183 阅读 · 0 评论 -
StringRedisTemplate和RedisTemplate区别和联
总结了一下区别和联系主要有四点:第一点,StringRedisTemplate继承了RedisTemplate。第二点,RedisTemplate是一个泛型类,而StringRedisTemplate则不是。第三点,StringRedisTemplate只能对key=String,value=String的键值对进行操作,RedisTemplate可以对任何类型的key-value键值...转载 2019-10-11 15:55:25 · 166 阅读 · 0 评论 -
Spring Boot 整合 Redis 实现缓存操作
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢!『产品没有价值,开发团队再优秀也无济于事 – 《启示录》 』本文提纲一、缓存的应用场景二、更新缓存的策略三、运行springboot-mybatis-redis工程案例四、springboot-mybatis-redis工程代码配置详解运行环境:...转载 2019-05-05 10:30:17 · 131 阅读 · 0 评论 -
分布式限流
后面有源码地址:中心思想:在某个时间段内,key有效时间,累加访问量脚本详解前言本文接着上文应用限流进行讨论。之前谈到的限流方案只能针对于单个 JVM 有效,也就是单机应用。而对于现在普遍的分布式应用也得有一个分布式限流的方案。基于此尝试写了这个组件:https://github.com/crossoverJie/distributed-redis-tool...转载 2019-04-29 16:10:38 · 237 阅读 · 0 评论 -
分布式锁是啥?对比下redis和zk两种分布式锁的优劣?
1、面试题一般实现分布式锁都有哪些方式?使用redis如何设计分布式锁?使用zk来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?2、面试官心里分析其实一般问问题,都是这么问的,先问问你zk,然后其实是要过度的zk关联的一些问题里去,比如分布式锁。因为在分布式系统开发中,分布式锁的使用场景还是很常见的。3、面试题剖析(1)redis分布式锁官方叫做RedLo...转载 2019-04-28 17:23:54 · 5903 阅读 · 1 评论 -
基于 Redis 的分布式锁到底安全吗(上)?
《Redis 内部数据结构详解(1):dict》 《Redis 内部数据结构详解(2):sds》 《Redis 内部数据结构详解(3):robj》 《Redis 内部数据结构详解(4):ziplist》 《Redis 内部数据结构详解(5):quicklist》 《Redis 内部数据结构详解(6):skiplist》 总括:...转载 2019-04-28 17:17:42 · 174 阅读 · 0 评论 -
基于redis的分布式锁
基于redis的分布式锁1 介绍这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁。本篇文章会将分布式锁的实现分为两部分,一个是单机环境,另一个是集群环境下的Redis锁实现。在介绍分布式锁的实现之前,先来了解下分布式锁的一些信息。2 分布式锁2.1 什么是分布式锁?分布式锁是控制分布式...转载 2019-04-28 15:02:39 · 201 阅读 · 0 评论 -
Redis分布式锁的正确实现方式
前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的...转载 2019-02-26 15:28:42 · 186 阅读 · 0 评论 -
利用自定义注解,AOP + redis限制ip访问接口次数
首先来一个注解 package co.yiiu.module.bountyHunter.pay.wxpay.core;import org.springframework.core.Ordered;import org.springframework.core.annotation.Order;import java.lang.annotation.*;/** * Crea...转载 2019-02-19 16:50:40 · 872 阅读 · 2 评论 -
redis限流
之前接触redis应用有业务加锁,数据库缓存,分布式锁,今天介绍的是用redis限流。实现逻辑:通过AOP实现,在方法上加注解。主要参考文章:https://blog.youkuaiyun.com/a309220728/article/details/84937630 不足之处是,自定义注解中,访问时间是固定的一分钟,实际入参只有访问次数。其实可以把时间也作为入参,实现更加灵活的配置。代码:...原创 2019-02-22 09:47:13 · 1571 阅读 · 0 评论