![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
分布式缓存 - Redis
文章平均质量分 92
分布式缓存 - Redis
文晓武
专注搜索推荐问答推荐工程领域,涉及到的技术有:Java、ElasticSearch、SpringBoot、SpringCloud、Dubbo、Linux、Docker、Sql、Kafka、RabbitMQ、RocketMQ、MyBatis、XXl-Job、Zookeeper、Nginx、Redis、Tomcat、Git、SVN、Maven、K8S等,每周不定期更新精华文章!
展开
-
Redis+Caffeine两级缓存,让访问速度纵享丝滑
我们看看下一个版本。另外,如果是分布式环境下,一级缓存之间也会存在一致性问题,当一个节点下的本地缓存修改后,需要通知其他节点也刷新本地缓存中的数据,否则会出现读取到过期数据的情况,这一问题可以通过类似于Redis中的发布/订阅功能解决。首先,两级缓存与数据库的数据要保持一致,一旦数据发生了修改,在修改数据库的同时,本地缓存、远程缓存应该同步更新。此外,缓存的过期时间、过期策略以及多线程访问的问题也都需要考虑进去,不过我们今天暂时先不考虑这些问题,先看一下如何简单高效的在代码中实现两级缓存的管理。...转载 2022-07-17 11:54:35 · 316 阅读 · 0 评论 -
16张图吃透 Redis 架构演进全过程(循序渐进)
现如今 Redis 变得越来越流行,几乎在很多项目中都要被用到,不知道你在使用 Redis 时,有没有思考过,Redis 到底是如何稳定、高性能地提供服务的?你也可以尝试回答一下以下这些问题:我使用 Redis 的场景很简单,只使用单机版 Redis 会有什么问题吗?我的 Redis 故障宕机了,数据丢失了怎么办?如何能保证我的业务应用不受影响?为什么需要主从集群?它有什么优势?什么是分片集群?我真的需要分片集群吗?...如果你对 Redis 已经有些了解,肯定也听说过数据持久化、主从复制、哨兵这些概念,它转载 2022-06-13 06:18:34 · 1358 阅读 · 0 评论 -
Redis经典100问
全面介绍Redis基础理论、用法、基础原理、架构设计以及集群部署方案。原创 2022-03-14 17:20:44 · 2243 阅读 · 0 评论 -
Redis压缩列表详细解析
压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效地节省内存开销。但是,压缩列表的缺陷也是有的: 不能保存过多的元素,否则查询效率就会降低; 新增或修改某个元素时,压缩列表占用的内存空间需要重新分配,甚至可能引发连锁更新的问题。 因此,Redis 对象(List 对象、Hash 对象、Zset 对象)包含的元素数量较少,或者元素值不大的情况才会使用压缩列表作为底层数据转载 2022-03-14 16:38:35 · 4020 阅读 · 2 评论 -
Redis布隆过滤器的作用以及原理
应对缓存穿透问题,我们可以使用布隆过滤器。布隆过滤器是什么呢?布隆过滤器是一种占用空间很小的数据结构,它由一个很长的二进制向量和一组Hash映射函数组成,它用于检索一个元素是否在一个集合中,空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。布隆过滤器原理是?假设我们有个集合A,A中有n个元素。利用k个哈希散列函数,将A中的每个元素映射到一个长度为a位的数组B中的不同位置上,这些位置上的二进制数均设置为1。如果待检查的元素,经过这k个哈希散列函数的映射后,发现其k个位置上的二转载 2022-03-14 16:31:04 · 768 阅读 · 0 评论 -
Redis到底有没有ACID事务的特性?
事务是数据库的一个重要属性,有关事务的4个特性,原子性、一致性、隔离性、持久性,也就是ACID,这些属性既包含了对事务执行结果的要求,也有数据库在事务执行前后的数据状态变化的要求。Redis可以完全保证ACID属性吗?如果保证不了,在一些场景下数据可能会出错,所以我们需要了解redis对于这些特性的支持情况事务ACID的要求原子性指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。一致性事务前后数据的完整性必须保持一致。例如:A有800,B有200,A给B转转载 2022-03-14 12:07:57 · 345 阅读 · 0 评论 -
为什么Redis集群设计为16384个槽?
引言我在《那些年用过的Redis集群架构(含面试解析)》一文里提到过,现在redis集群架构,redis cluster用的会比较多。如下图所示对于客户端请求的key,根据公式HASH_SLOT=CRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作!那大家思考过,为什么有16384个槽么?ps:CRC16算法产生的hash值有16bit,该算法可以产生2^16-=65536个值。换句话说,值是分布在0~65535之间。那作者在做mod运算转载 2022-03-14 06:55:33 · 8022 阅读 · 4 评论 -
面试不怂之redis与缓存大全(深度好文)
基础篇1、问题:什么是redis?答:Redis是一个基于内存的高性能key-value数据库。2、问题:redis可以用在哪些业务上?答:redis可以做很多事情,比如: 缓存 分布式锁 (setnx) 简易的消息队列(List/Streams) 简易订阅通知(Pub/Sub) 延时通知(键过期事件通知) 附近的人(GEO) 以下是具体业务场景: 记录帖子的点赞数、评论数和点击数 (hash)。 记录用户的帖子 .转载 2022-03-02 12:39:17 · 267 阅读 · 0 评论 -
读懂Redis源码,我总结了这7点心得(如何高效的阅读源码)
你好,我是 Kaito。用了这么久的 Redis,也翻了很多次源码,经常有人问我到底怎么读 Redis 源码。一提到读源码,很多人都会比较畏惧,认为读源码是高手才会做的事情。他们可能遇到问题时,会更倾向于去找别人分享的答案。但往往很多时候,自己查到的资料并不能解决所有问题,尤其是比较细节的问题。从我的实战经验来看,遇到这种情况,通常就需要去源码中寻找答案了,因为在源码面前,这些细节会变得「一览无余」。而且我认为,掌握读源码的能力,是从只懂得如何使用 Redis,到精通 Redis 实现原理的转载 2022-03-02 09:31:12 · 497 阅读 · 0 评论 -
亿级流量架构之服务限流思路与方法
有读者说自己参加秋招时准备的项目是秒杀系统,他在 Redis 和 MySQL 的设计上准备了很多,但是每次面试偏偏面试官先问他怎么限流。限流他又没准备,回答的很不条理,刚面试开始自己就慌了。其实在实际的秒杀系统中,限流是特别重要的,所以面试官也特别注意这方面的问题。今天看到一篇很系统的讲解限流的文章,一起来学习下。为什么要限流日常生活中,有哪些需要限流的地方?像我旁边有一个国家景区,平时可能根本没什么人前往,但是一到五一或者春节就人满为患,这时候景区管理人员就会实行一系列的政策来限制进入人流转载 2022-03-02 09:30:58 · 144 阅读 · 0 评论 -
点赞模块设计 - Redis缓存 + 定时写入数据库实现高性能点赞功能
点赞是作为整个系统的一个小模块,代码在 user-service 用户服务下。本文基于 SpringCloud, 用户发起点赞、取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储。点赞功能在很多系统中都有,但别看功能小,想要做好需要考虑的东西还挺多的。点赞、取消点赞是高频次的操作,若每次都读写数据库,大量的操作会影响数据库性能,所以需要做缓存。至于多久从 Redis 取一次数据存到数据库中,根据项目的实际情况定吧,我是暂时设了两个小时。项目转载 2022-03-01 22:55:17 · 297 阅读 · 0 评论 -
内存耗尽后 Redis 会发生什么?
# 前言作为一台服务器来说,内存并不是无限的,所以总会存在内存耗尽的情况,那么当 Redis 服务器的内存耗尽后,如果继续执行请求命令,Redis 会如何处理呢?# 内存回收使用Redis 服务时,很多情况下某些键值对只会在特定的时间内有效,为了防止这种类型的数据一直占有内存,我们可以给键值对设置有效期。Redis 中可以通过 4 个独立的命令来给一个键设置过期时间: expire key ttl:将 key 值的过期时间设置为 ttl 秒。 pexpire key ttl:转载 2022-03-01 22:42:55 · 164 阅读 · 0 评论 -
为什么 Redis 的查询很快,Redis 如何保证查询的高效
◆Redis 如何保证高效的查询效率◆为什么 Redis 比较快Redis 中的查询速度为什么那么快呢?1、因为它是内存数据库;2、归功于它的数据结构;3、Redis 中是单线程;4、Redis 中使用了多路复用。◆Redis 中的数据结构这里借用一张来自[Redis核心技术与实战] Redis 中数据结构和底层结构的对应图片◆1、简单动态字符串Redis 中并没有使用 C 中 char 来表示字符串,而是引入了 简单动态字符串(Simple Dynam...转载 2022-03-01 22:39:38 · 756 阅读 · 0 评论 -
【超硬核】秒杀活动技术方案,Redis申请32个G,被技术总监挑战了...
你一定听过一句话:性能不够,缓存来凑!对,你没听错,就是缓存。但是,哈哈,也不是拿来主义,张手就来。这不,小王接到一个秒杀活动任务,设计技术方案,大量的数据扔到缓存里,想借助Redis的高吞吐量来抗住峰值压力。这个思路也没错,这不一评估缓存内容占用的空间大小,需要30来个G。你觉得有没有问题?觉得没问题的同学,可以去打游戏了我们知道Redis集群有主从模式或者哨兵模式无论采用采用那种模式,从节点同步数据时,开始需要fork子进程,生成RDB文件,如果数据容量过大,转载 2022-03-01 22:37:05 · 136 阅读 · 0 评论 -
高可用Redis服务架构分析与搭建
基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问转载 2022-03-01 22:34:39 · 159 阅读 · 0 评论 -
Redis 使用不当导致应用卡死的 BUG
首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应用,应用恢复正常,于是没做处理。但是后来问题出现频率越来越频繁,越来越多的同事开始抱怨,于是感觉代码可能有问题,开始排查。top 命令首先发现开发的本地ide没有发现问题,应用卡死时候数据库,redis都正常,并且无特殊错误日志。开始怀疑是sandbox环境机器问题(测试环境本身就很脆!_!)于是ssh上了服务器 执行以下命令top这时发现机器转载 2022-03-01 22:33:39 · 506 阅读 · 0 评论 -
Redis 使用 List 实现消息队列的利与弊
分布式系统中必备的一个中间件就是消息队列,通过消息队列我们能对服务间进行异步解耦、流量消峰、实现最终一致性。目前市面上已经有RabbitMQ、RochetMQ、ActiveMQ、Kafka等,有人会问:“Redis 适合做消息队列么?”在回答这个问题之前,我们先从本质思考: 消息队列提供了什么特性? Redis 如何实现消息队列?是否满足存取需求? 今天,码哥结合消息队列的特点一步步带大家分析使用 Redis 的 List 作为消息队列的实现原理,并分享如何把 SpringBo.转载 2022-03-01 22:31:59 · 706 阅读 · 0 评论 -
Redis 分布式锁的正确实现原理演化历程与 Redisson 实战总结
❝可能是最完善的Redis 分布式锁原理与实战总结,建议收藏!Redis 分布式锁使用SET指令就可以实现了么?在分布式领域CAP理论一直存在。分布式锁的门道可没那么简单,我们在网上看到的分布式锁方案可能是有问题的。「码哥」一步步带你深入分布式锁是如何一步步完善,在高并发生产环境中如何正确使用分布式锁。在进入正文之前,我们先带着问题去思考: 什么时候需要分布式锁? 加、解锁的代码位置有讲究么? 如何避免出现锁再也无法删除? 超时时间设置多少合...转载 2022-03-01 22:30:55 · 260 阅读 · 0 评论 -
同一份数据,Redis为什么要存两次?
前言在 Redis 中,有一种数据类型,当在存储的时候会同时采用两种数据结构来进行分别存储,那么 Redis 为什么要这么做呢?这么做会造成同一份数据占用两倍空间吗?五种基本类型之集合对象Redis 中的集合对象是一个包含字符串类型元素的无序集合,集合中元素唯一不可重复。集合对象的底层数据结构有两种:intset 和 hashtable。内部通过编码来进行区分:intset 编码intset(整数集合)可以保存类型为int16_t,int32_t,int64_t的整数值,并且..转载 2022-03-01 22:29:14 · 132 阅读 · 0 评论 -
Redis 解决 WebSocket 分布式场景下 Session共享问题
在显示项目中遇到了一个问题,需要使用到websocket与小程序建立长链接。由于项目是负载均衡的,存在项目部署在多台机器上。这样就会存在一个问题,当一次请求负载到第一台服务器时,socketsession在第一台服务器线程上,第二次请求,负载到第二台服务器上,需要通过id查找当前用户的session时,是查找不到的。图片可以看到,由于websocket的session并没有实现序列化接口。所以无法将session序列化到redis中。web的中的httpsession 主要是通过下面的两个管转载 2022-03-01 22:21:06 · 3160 阅读 · 0 评论 -
Redis 7.0 共享复制缓冲区的设计与实现
本文将主要分析 Redis 主从复制中的内存消耗过多和堵塞问题,以及 Redis 7.0 (尚未发布) 的共享复制缓冲区方案是如何解决这些问题的。1 Redis 主从复制原理简介尽管本文的目的不是讲解 Redis 主从复制的原理,但在开始进入主题之前,我们先简单回顾一下 Redis 主从复制的基本原理。Redis 的主从复制主要分为两种情况: 全量同步 当主库收到从库的同步请求时,如果从库的复制历史与主库不一致,或者未能在复制积压区中找到从库请求的同步点时,则会与从库进行全量同步。主库通过转载 2022-03-01 22:27:26 · 185 阅读 · 0 评论 -
为什么Redis主节点的Key已过期,但从节点依然读到过期数据?
我们知道,大部分的业务场景都是读多写少,为了利用好这个特性,提升Redis集群系统的吞吐能力,通常会采用主从架构、读写分离。如上图所示:其中 Master节点:负责业务的写操作 Slave节点:实时同步Master节点的数据,提供读能力 为了提高吞吐量,采用一主多从的架构,将业务的读压力分摊到多台服务器上述方案,看似合理,但其实可能存在一定隐患!一、拉取过期数据Redis性能高主要得益于纯内存操作,但内存存储介质的成本过高,所以数据的存储有一定的约束。转载 2022-03-01 17:13:29 · 923 阅读 · 0 评论 -
Redis数据结构为什么既省内存又高效?
底层存储当其他人问你Redis是如何用单线程来实现每秒10w+的QPS,你会如何回答呢? 使用IO多路复用 非CPU密集型任务 纯内存操作 巧妙的数据结构 我们今天就来盘盘Redis数据结构到底有多巧妙!「Redis所有的数据结构都是在内存占用和执行效率之间找一个比较好的均衡点,不一味的节省内存,也不一味的提高执行效率」Redis底层就是一个大map,key是字符串,value可能是字符串,哈希,列表等。如何记录这个value的类型呢?我们定义一个转载 2022-03-01 17:08:11 · 403 阅读 · 0 评论 -
Redis源码之BitMap
本文在最后讲解了BitMap对腾讯面试题的解决方案,并基于BitMap实现了仿GitHub提交次数的日历图,希望各位看官看的开心😄1.位图简介如果我们需要记录某一用户在一年中每天是否有登录我们的系统这一需求该如何完成呢?如果使用KV存储,每个用户需要记录365个,当用户量上亿时,这所需要的存储空间是惊人的。Redis 为我们提供了位图这一数据结构,每个用户每天的登录记录只占据一位,365天就是365位,仅仅需要46字节就可存储,极大地节约了存储空间。位图数据结构其实并不是一个全新的玩意转载 2022-03-01 16:51:22 · 236 阅读 · 0 评论 -
一文讲透如何排查Redis性能问题
编者荐语:服务性能变差的原因往往都隐藏的很深,需要你像侦探一样找出瓶颈。拿 Redis 举例,响应变慢了该如何排查和优化。Kaito这篇是我见过全网最牛的redis性能文章,cpu、磁盘、内存等角度全涉及到了。推荐给你阅读,也强烈推荐关注「水滴与银弹」。以下文章来源于水滴与银弹,作者Magic Kaito水滴与银弹.7年资深后端,擅长Redis、基础架构、中间件、异地多活,QConf+合作讲师,只写硬核、通透的技术文章。阅读本文大约需要 30 分钟。Redis 作为优秀的内.转载 2022-03-01 16:36:55 · 437 阅读 · 0 评论 -
别再用 Redis List 实现消息队列了,Stream 专为队列而生
上回说到使用 Redis 的 List 实现消息队列有很多局限性,比如: 没有良好的 ACK 机制; 没有 ConsumerGroup 消费组概念; 消息堆积。 List 是线性结构,想要查询指定数据需要遍历整个列表; Stream 是 Redis 5.0 引入的一种专门为消息队列设计的数据类型,Stream 是一个包含 0 个或者多个元素的有序队列,这些元素根据 ID 的大小进行有序排列。它实现了大部分消息队列的功能: 消息 ID 系列化生成;转载 2022-03-01 16:27:24 · 346 阅读 · 0 评论 -
Redis 源码分析 I/O 模型详解
◆主流 I/O 模型阻塞IO、非阻塞IO、异步 IO 。◆BIO 模型同步阻塞模型,一个客户单对应一个链接的处理线程缺点:1、IO 中如果进行 read 是阻塞操作,如果请求的链接操作不做任何操作,也会导致线程阻塞,浪费线程资源2、如果线程很多,会导致服务器压力增加,比如 C10K问题引用场景:BIO 方式运用数目比较小且固定的架构,这种方式对服务器资源要求比较高,但是程序简单容易理解。◆NIO 模型同步非阻塞,是服务器实现的模式是一个线程可以处理多个请求(...转载 2022-03-01 15:49:48 · 309 阅读 · 0 评论 -
解决了Redis大key问题
荐言Redis大key的问题,是开发之初容易被忽视的问题。因为它需要数据量比较大的特殊场景才显现,所以这些问题一般都会出现在线上生产环境上,大白的这篇文章,故事性的通俗易懂的文字加上图解,讲解了Redis大key问题,推荐给大家。前言前几天元宵节,小黑准时下班回到家,吃着汤圆,看着电视,好生惬意!忽然,手机叮咣叮咣响个不停报警,看了下是某个服务调用Redis异常了。放下饭碗,小黑打开电脑一顿排查,最终定位到是Redis有大key问题。寻思一时半会儿也解决不了,明天到公司再搞,先继续看转载 2022-03-01 15:32:13 · 5651 阅读 · 0 评论 -
聊聊Redis性能优化的13个小技巧
Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1)),但由于 Redis 是单线程执行的特点,因此它对性能的要求更加苛刻,本文我们将通过一些优化手段,让 Redis 更加高效的运行。本文我们将使用以下手段,来提升 Redis 的运行速度: 缩短键值对的存储长度; 使用 lazy free(延迟删除)特性; 设置键值的过期时间;.转载 2022-03-01 10:06:15 · 1466 阅读 · 0 评论 -
七种方案探讨Redis分布式锁的正确使用姿势
日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式。如果有不正确的地方,欢迎大家指出哈,一起学习一起进步。 什么是分布式锁 方案一:SETNX + EXPIRE 方案二:SETNX + value值是(系统时间+过期时间) 方案三:使用Lua脚本(包含SETNX + EXPIRE两条指令) 方案四:SET的扩展命令(SET EX PX NX)转载 2022-03-01 10:04:47 · 144 阅读 · 0 评论 -
手把手教你在学会Docker安装Redis镜像
大家都知道 Docker 是个非常好用的容器工具,但是很多人对这个工具怎么在自己的服务器上安装和启动都比较陌生,因为 Docker 现在很多人都使用的是 Windows 的,尽管这个工具有很多公司对他抱有反对的态度,但是技术嘛,我们还是要学习一下的,今天我们就学一下 Docker 的安装,和安装镜像,并且实现一个小功能。安装Docker1.在线安装curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2、在线安装方转载 2022-02-28 19:56:32 · 467 阅读 · 0 评论 -
Redis分布式锁如何自动续期
1、Redis 实现分布式锁 指定一个 key 作为锁标记,存入 Redis 中,指定一个唯一的用户标识作为 value。 当 key 不存在时才能设置值,确保同一时间只有一个客户端进程获得锁,满足互斥性特性。 设置一个过期时间,防止因系统异常导致没能删除这个 key,满足防死锁特性。 当处理完业务之后需要清除这个 key 来释放锁,清除 key 时需要校验 value 值,需要满足只有加锁的人才能释放锁 。 2、问题如果这个锁的过期时间是30秒,但是业务运行超过转载 2022-02-28 19:29:15 · 3160 阅读 · 1 评论 -
Redis 实现限流的三种方式
面对越来越多的高并发场景,限流显示的尤为重要。当然,限流有许多种实现的方式,Redis具有很强大的功能,我用Redis实践了三种的实现方式,可以较为简单的实现其方式。Redis不仅仅是可以做限流,还可以做数据统计,附近的人等功能,这些可能会后续写到。第一种:基于Redis的setnx的操作我们在使用Redis的分布式锁的时候,大家都知道是依靠了setnx的指令,在CAS(Compare and swap)的操作的时候,同时给指定的key设置了过期实践(expire),我们在限流的主要目的就是为了转载 2022-02-28 18:02:03 · 1803 阅读 · 0 评论 -
Redis 经典面试 20 问
今天给大家分享一下Redis 面试常考的题目,答案也整理好了,非常贴心有木有,快来看看你能答对几个Redis是什么?Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁盘中,保证了数据的安全不丢失,而且Redis的操作是原子性的。Redis的优点? 基于内存操作,内存读写速度快。 Redi.转载 2022-02-28 17:21:07 · 210 阅读 · 0 评论 -
Redis为什么在6.0版本之后引入多线程?
Redis作为一个基于内存的缓存系统,一直以高性能著称,因没有上下文切换以及无锁操作,即使在单线程处理情况下,读速度仍可达到11万次/s,写速度达到8.1万次/s。但是,单线程的设计也给Redis带来一些问题: 只能使用CPU一个核; 如果删除的键过大(比如Set类型中有上百万个对象),会导致服务端阻塞好几秒; QPS难再提高。 针对上面问题,Redis在4.0版本以及6.0版本分别引入了Lazy Free以及多线程IO,逐步向多线程过渡,下面将会做详细介绍。# 单线程原理转载 2022-02-28 17:01:01 · 310 阅读 · 0 评论 -
Redis缓存使用技巧和设计方案
缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要。下面会介绍缓存使用技巧和设计方案,包含如下内容:缓存的收益和成本分析、缓存更新策略的选择和使用场景、缓存粒度控制方法、穿透问题优化、无底洞问题优化、雪崩问题优化、热点key重建优化。1)缓存的收益和成本分析下图左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构。下面分析一下缓存加入后带来的收益和成本。收益:①加速读写:因为缓存通常都是全内存的,而存储层通常读写性能不够强悍(例如MyS转载 2022-02-28 16:28:54 · 74 阅读 · 0 评论 -
RedisJson 横空出世,性能碾压ES和Mongo
| 概述近期官网给出了RedisJson(RedisSearch)的性能测试报告,可谓碾压其他NoSQL,下面是核心的报告内容,先上结论: 对于隔离写入(isolated writes),RedisJSON 比 MongoDB 快 5.4 倍,比 ElasticSearch 快 200 倍以上。 对于隔离读取(isolated reads),RedisJSON 比 MongoDB 快 12.7 倍,比 ElasticSearch 快 500 倍以上。 在混合工作负载场景中,实时更新不转载 2022-02-28 16:13:49 · 182 阅读 · 0 评论 -
RedisInsight :Redis 官方可视化工具来啦
最近逛了一下Redis官方网站,发现Redis不仅推出了很多新特性,而且还发布了一款可视化工具RedisInsight。试用了一下感觉非常不错,最关键的是能支持RedisJSON之类的新特性,这是第三方工具无法比拟的。今天带大家体验一下RedisInsight,确实非常好用!RedisInsight简介RedisInsight是Redis官方出品的可视化管理工具,可用于设计、开发、优化你的Redis应用。支持深色和浅色两种主题,界面非常炫酷!可支持String、Hash、Set、List、JSO.转载 2022-02-28 16:00:56 · 25838 阅读 · 9 评论 -
Redis常见知识点总结(2021版)
内容很硬!强烈建议小伙伴们花 15分钟左右阅读一遍!1. 简单介绍一下 Redis 呗!简单来说Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是Redis 的数据是存在内存中的,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。2. 分布式缓...转载 2022-02-28 15:19:01 · 211 阅读 · 0 评论 -
快看我在Redis分布式锁上,栽的8个跟头
在分布式系统中,由于redis分布式锁相对于更简单和高效,成为了分布式锁的首先,被我们用到了很多实际业务场景当中。但不是说用了redis分布式锁,就可以高枕无忧了,如果没有用好或者用对,也会引来一些意想不到的问题。今天我们就一起聊聊redis分布式锁的一些坑,给有需要的朋友一个参考。一、非原子操作使用redis的分布式锁,我们首先想到的可能是setNx命令。if (jedis.setnx(lockKey, val) == 1) { jedis.expire(lockKey, t转载 2022-02-28 11:17:20 · 552 阅读 · 0 评论