![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 62
C18298182575
跳出舒适区
展开
-
【redis】JAVA中的opsForHash如何设置过期时间
在网络上搜这个问题的时候,弹出来的要么都是说redis设置TTL的和实现过期的原理(谁关心这个),要么就是说用opsForValue来代替(实测,能代替个鬼)。最后是用redisDesktopManage手动设置TTL的时候,得到启发,工具既然能设置,那么代码一定有办法,仔细看了方法,这就找到了。原文链接:https://blog.csdn.net/lhjllff12345/article/details/126786999。//设置过期时间600秒。转载 2023-08-02 15:02:20 · 2022 阅读 · 0 评论 -
集群模式下的消息一致性问题
caffeine缓存一致性问题转载 2022-11-29 14:21:00 · 469 阅读 · 0 评论 -
聊聊分布式锁的多种实现!
分布式锁实现方案转载 2022-11-10 17:16:23 · 135 阅读 · 0 评论 -
redis 的线程模型
一、redis 的线程模型#redis 内部使用文件事件处理器file event handler,它是单线程的,所以redis才叫做单线程模型。它采用IO多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。文件事件处理器的结构:多个 socket IO 多路复用程序 文件事件分派器 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)线程模型多个 socket 可.转载 2021-12-17 14:27:45 · 1468 阅读 · 0 评论 -
redis 的线程模型
文件事件处理器(file event handler)Redis 基于 Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler)文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套接字关联不同的事件处理器。当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作时, 与操作相对应的文件事件就会产生, 这时文件事转载 2021-12-17 14:26:02 · 82 阅读 · 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 · 1086 阅读 · 0 评论 -
删缓存,数据库更新谁先执行,及延时双删
先操作哪个,主要问题不是其中一个执行失败的问题先删除缓存,再更新数据库:存在主要问题不是更新数据库失败,导致读到老数据,是并发情况下删除缓存后,立刻读库,此时库数据还没更新,读到了老数据,又写入了缓存,导致以后所有人读到都是缓存中错误数据先更新数据库,再删除缓存:存在主要问题是,更新数据库后,还没删除缓存,导致部分人读到了缓存中老数据,当缓存删除后,就可以从数据库读取正确数据,缓存也就正确,以后大部分人读到正确数据。...原创 2021-11-24 15:25:11 · 1477 阅读 · 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 · 106 阅读 · 0 评论 -
Redis由分布式锁造成的重大事故
前言基于Redis使用分布式锁在当今已经不是什么新鲜事了。本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案。背景:我们项目中的抢购订单采用的是分布式锁来解决的。有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了!要知道,这个地球上飞天茅台的稀缺性啊!!!事故定为P0级重大事故...只能坦然接受。整个项目组被扣绩效了~~事故发生后,CTO指名点姓让我带头冲锋来处理,好吧,冲~事故现场经过一番了解后,得知这个抢购活动接口以前从来没有出现过这种情况,但是这转载 2021-11-03 15:18:07 · 128 阅读 · 0 评论 -
redis实现排行查询及排序及分页
需求分析如上图,app实现基金经理的查询,可根据年化回报率,综合得分,升序或降序排列,可下拉刷新,即实现分页效果。生产数据24000左右,不算大,但是app查询要求响应速度,不能查询表,可以把数据放到缓存中,查询缓存。怎么存,选择什么数据结构?需要排序,可以选择有序集合zsetZADD key score member [[score member] [score member] ...]key:基金的keysorce:回报率或综合评分member:基金编码除此之外...原创 2021-11-03 14:17:57 · 2981 阅读 · 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 · 1046 阅读 · 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 · 155 阅读 · 0 评论 -
Redis-槽道原理
Redis ClusterRedis3.0之后,节点之间通过去中心化的方式提供了完整的sharding(分片)、replication(复制)、failover解决方案,称为 Redis Cluster。1、所有redis节点(包括主和从)彼此互联(两两通信)。2、集群中的高可用逻辑,通过主节点的过半选举实现主从替换。3、客户端与redis-cluster连接,无需再关心分片的计算,客户端不在关心分片的计算逻辑,内部分发分布式数据(内部有分片计算逻辑),客户端将key交给redis节点后,集群内部转载 2021-10-21 16:52:24 · 323 阅读 · 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 · 4414 阅读 · 8 评论 -
更新数据,删除缓存,更新数据库谁先执行
1.先更新数据库,再删除缓存2.先删除缓存,再更新数据库答案:方案1方案2存在问题查询与更新并发,更新操作先删除了缓存,还未更新数据库,查询操作未取到缓存,直接查询了数据库,这时候数据库还未更新,取到了脏数据,然后把脏数据放到了缓存,后续请求取到都是脏数据。方案1查询与更新并发,更新操作,数据库执行成功,但缓存未删除,此时进来查询的走缓存,取到了脏数据,但是等删除缓存也执行完成,后面的请求就会取数据库正确的数据,再放入缓存,这样后续的请求,取到的数据都是正确数据。分布式系统知识点原创 2021-09-17 12:55:20 · 508 阅读 · 0 评论 -
redis双写一致性问题
1,更新缓存,更新数据库2,更新数据库,更新缓存3,删除缓存,更新数据库4,更新数据库,删除缓存(推荐)原创 2021-09-09 23:23:22 · 100 阅读 · 0 评论 -
读redis->双重检测同步锁->防止Redis缓存击穿
一般用redis做数据缓存,查询缓存时先查询缓存,没有再查下数据,然后更新缓存。这里会存在一个问题:并发情况10000个用户查询缓存,缓存失效,那么10000个用户都怼到数据库了,会造成很大压力,也就是缓存击穿,不是穿透。击穿与穿透区别:穿透:缓存无(压根没有),数据库无击穿:缓存无(缓存失效),数据库有相同点:大量请求怼到数据库按理说:10000请求,都判断无缓存,那么如果只有一个线程能继续执行,(加锁)继续取读到数据库数据,然后更新缓存,这时其他线程等待。之后,其他线程就可以读取原创 2021-09-09 23:17:05 · 578 阅读 · 0 评论 -
Zookeeper 和redis做分布式锁区别
redis1.保证最终一致性,副本间的数据复制是异步进行,(set写 get读,redis是读写分离架构,存在主从从不延迟的情况),而且,主从切换可能导致部分数据,没有复制过去,导致数据丢失,所以要求强一致性时,推荐zk.2.Redis各集群的方法响应时间为最低,随着并发量和业务数量上升其响应时间会明显上升,但是极限qps,可以达到最大基本无异常。ZK1.也无法保证完全一致性,其他原理是使用临时顺序节点,节点生命周期在client与集群的Session结束时结束。因此某个client节点存在原创 2021-09-06 23:12:26 · 173 阅读 · 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 · 89 阅读 · 0 评论 -
Redis只能做缓存?太out了!
Redis只能做缓存?太out了!https://mp.weixin.qq.com/s/DgIB3e1_nS1mr2_RszDapA芋道源码前天以下文章来源于小姐姐味道,作者小姐姐养的狗小姐姐味道.不羡鸳鸯不羡仙,一行代码调半天点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天10:33更新文章,每天掉亿点点头发...源码精品专栏 原创 | Java 2021超神之路,很肝~ 中文详细注释的开源项目 ...转载 2023-04-13 16:03:45 · 106 阅读 · 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 · 321 阅读 · 0 评论 -
redis主从、哨兵、集群的区别
原文来自:https://blog.csdn.net/c295477887/article/details/52487621关于redis主从、哨兵、集群的介绍网上很多,这里就不赘述了。一、主从通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。。但是由于数据是存储在一台服务器上的,如果这台...转载 2019-10-10 09:35:24 · 314 阅读 · 0 评论 -
StringRedisTemplate和RedisTemplate区别和联
总结了一下区别和联系主要有四点:第一点,StringRedisTemplate继承了RedisTemplate。第二点,RedisTemplate是一个泛型类,而StringRedisTemplate则不是。第三点,StringRedisTemplate只能对key=String,value=String的键值对进行操作,RedisTemplate可以对任何类型的key-value键值...转载 2019-10-11 15:55:25 · 125 阅读 · 0 评论 -
关于RedisTemplate和StringRedisTemplate
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/notsaltedfish/article/details/75948281最近在开始在学习Redis以及如何在Java当中去使用Redis,Redis是什么我这里就不说了。我主要想说的是Redis和Java当中Spring结合起来的...转载 2019-10-11 16:05:07 · 146 阅读 · 0 评论 -
RedisTemplate和StringRedisTemplate在项目中应用
一,应用场景:项目启动时,需要进行初始化,初始化内容为redis缓存,目的是数据提前加载到缓存,而不是在项目中查询用到了,再去查询数据库,初始化缓存初始化实现逻辑:清空缓存,查询数据库,初始化redis及本地缓存。二,实现项目中redis存储的数据类型有两种,一种是String,一种是对象类型数据String类型数据,使用StringRedisTemplate类对象类型数据,用...原创 2019-10-11 17:00:34 · 615 阅读 · 0 评论 -
深度剖析redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案
redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案01前言在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到...转载 2019-07-30 09:11:30 · 106 阅读 · 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 · 797 阅读 · 2 评论 -
验证是否精通Redis,从这八个问题开始
转发:https://www.toutiao.com/a6736055922419843595/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1×tamp=1568592486&app=news_article&utm_source=weixin&utm_medium=t...转载 2019-09-16 09:42:17 · 867 阅读 · 0 评论 -
redis分布式锁的复杂实现
一,业务场景,秒杀系统1,实现分布式锁2,不能超卖二,实现逻辑1,synchronized,在抢购方法上加同步锁synchronized,弊端:只使用单机环境;很慢。只有所有逻辑执行完,下个人才能购买,把东西卖完耗时长2,redis锁,在方法内部对商品加锁,解锁成功,继续执行购买操作,最后解锁。但是productId相同,不还是只用一个人能执行业务逻辑,其他用户只有等待吗?(暂...原创 2019-07-31 18:58:59 · 142 阅读 · 0 评论 -
分布式限流
后面有源码地址:中心思想:在某个时间段内,key有效时间,累加访问量脚本详解前言本文接着上文应用限流进行讨论。之前谈到的限流方案只能针对于单个 JVM 有效,也就是单机应用。而对于现在普遍的分布式应用也得有一个分布式限流的方案。基于此尝试写了这个组件:https://github.com/crossoverJie/distributed-redis-tool...转载 2019-04-29 16:10:38 · 184 阅读 · 0 评论 -
分布式锁是啥?对比下redis和zk两种分布式锁的优劣?
1、面试题一般实现分布式锁都有哪些方式?使用redis如何设计分布式锁?使用zk来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?2、面试官心里分析其实一般问问题,都是这么问的,先问问你zk,然后其实是要过度的zk关联的一些问题里去,比如分布式锁。因为在分布式系统开发中,分布式锁的使用场景还是很常见的。3、面试题剖析(1)redis分布式锁官方叫做RedLo...转载 2019-04-28 17:23:54 · 5835 阅读 · 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 · 143 阅读 · 0 评论 -
基于redis的分布式锁
基于redis的分布式锁1 介绍这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁。本篇文章会将分布式锁的实现分为两部分,一个是单机环境,另一个是集群环境下的Redis锁实现。在介绍分布式锁的实现之前,先来了解下分布式锁的一些信息。2 分布式锁2.1 什么是分布式锁?分布式锁是控制分布式...转载 2019-04-28 15:02:39 · 161 阅读 · 0 评论 -
Redis分布式锁的正确实现方式
前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的...转载 2019-02-26 15:28:42 · 143 阅读 · 0 评论 -
为什么说Redis是单线程的?
https://mp.weixin.qq.com/s?__biz=MzUxOTAxODc2Mg==&mid=2247483796&idx=2&sn=e7744c95c42ce629038c1257d9b73b0e&chksm=f98141f1cef6c8e724ccbe7ec60c64deb47a02629f3267512d08b9da782c92cc7a0885f...转载 2019-03-05 13:44:54 · 142 阅读 · 0 评论 -
redis限流
之前接触redis应用有业务加锁,数据库缓存,分布式锁,今天介绍的是用redis限流。实现逻辑:通过AOP实现,在方法上加注解。主要参考文章:https://blog.csdn.net/a309220728/article/details/84937630 不足之处是,自定义注解中,访问时间是固定的一分钟,实际入参只有访问次数。其实可以把时间也作为入参,实现更加灵活的配置。代码:...原创 2019-02-22 09:47:13 · 1518 阅读 · 0 评论 -
redis登录查询
场景:执行oversea中间表定时任务,保证文件不被重复读取,加redis锁,保证文件数据落地后,再执行落中间表任务。springBoot-redis一,集群配置:同一个机器redis: clusterNodes: - 10.108.6.90:6179 - 10.108.6.90:6279 - 10.1...原创 2019-01-10 11:02:22 · 2586 阅读 · 0 评论 -
项目中并发案例
背景:我们公司是做wms仓储系统管理,对汽车零配件收货,补货,拣货,出库进行管理场景:拣货操作,扫描拣货单,根据单子上料箱号,一个一个扫描料箱。并要求一个拣货单只能有一个人操作原因:对于一个料箱,只要你扫的够快,有多快就有多快,就会被重复操作,导致重复拣货或出库实现逻辑:给拣货单和料箱加锁,操作完成释放锁代码实现:通过跑redis锁,先判断是否已加锁,没有,则加锁,操作完成释放锁。...原创 2019-01-10 10:58:19 · 504 阅读 · 0 评论 -
redis布隆过滤器
讲个使用场景,比如我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻客户端推荐系统如何实现推送去重的?你会想到服务器记录了用户看过的所有历史记录,当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选,过滤掉那些已经存在的记录。问题是当用户量很大,每个用户看过的新闻又很多的情况下,这种方式,推荐系统的去重工作在性能上跟的上么?...转载 2018-12-31 10:48:02 · 1025 阅读 · 0 评论 -
基于jedis.setnx(key, value)实现分布式锁
在单实例的环境中,java中实现锁的方式一般采用ReentrantLock类或者synchronized关键字来实现;而在分布式环境中,就必须考虑同步访问可能引发的一些问题了,如定时任务。而redis的一个特性就能很好的满足分布式锁要求:单实例执行;实现方式可以基于数据库,zookeeper 等达到控制的目的,单这里就不做讨论了。既然redis能够实现,那么我们来看一下是什么原因:...转载 2018-12-31 10:42:22 · 4660 阅读 · 0 评论