官方提供的数据可以达到100000+的QPS (每秒内的查询次数) ,这个数据不比Memcached差!
Redis是单线程的,为什么还能这么快吗?
我:可以这么说吧,总结一下有如下四点:
●Redis完全基于内存,绝大部分请求是纯粹的内存操作,非常迅速,数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度是0(1)。
●数据结构简单,对数据操作也简单。
●采用单线程,避免了不必要的上下文切换和竞争条件,不存在多线程导致的CPU切换,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有死锁问题导致的性能消耗。
●使用多路复用10模型,非阻塞10。
选择Redis的缓存方案而不用Memcached
原因有如下四点:
●存储方式上:Memcache会把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。Redis有部分数据存在硬盘上,这样能保证数据的持久性。
●数据支持类型上:Memcache对数据类型的支持简单,只支持简单的key-value,而Redis支持五种数据类型。
●使用底层模型不同:它们之间底层实现方式以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
●Value的大小:Redis可以达到1GB,而Memcache只有1MB。
Redis有六种淘汰策略,如下图:
补充一下:Redis 4.0加入了LFU (least frequency use)淘汰策略,包括volatile-lfu和alkeys-lfu,通过统计访问频率,将访问频率最少,即最不经常使用的KV淘汰。
Redis为了保证效率,数据缓存在了内存中,但是会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件中,以保证数据的持久化。
Redis的持久化策略有两种:
●RDB:快照形式是直接把内存中的数据保存到一个dump的文件中,定时保存,保存策略。
●AOF:把所有的对Redis的服务器进行修改的命令都存到一个文件里,命令的集合。Redis默认是快照RDB的持久化方式。
当Redis重启的时候,它会优先使用AOF文件来还原数据集,因为AOF文件保存的数据集通常比RDB文件所保存的数据集更完整。你甚至可以关闭持久化功能,让数据只在服务器运行时存。
默认Redis是会以快照"RDB"的形式将数据持久化到磁盘的一个二进制文件dump.rdb。,
工作原理简单说一下:当Redis需要做持久化时,Redis会fork 一个子进程,子进程将数据写到磁盘上一个临时RDB文件中。
当子进程完成写临时文件后,将原来的RDB替换掉,这样的好处是可以copy-on-write。
RDB的优点是:这种文件非常适合用于备份:比如,你可以在最近的24小时内,每小时备份一次,并且在每个月的每一天也备份一个RDB文件。
这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。RDB非常适合灾难恢复。
RDB的缺点是:如果你需要尽量避免在服务器故障时丢失数据,那么RDB不合适你。
主从复制会存在哪些问题
●一旦主节点宕机,从节点晋升为主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预。
●主节点的写能力受到单机的限制。
●主节点的存储能力受到单机的限制。
●原生复制的弊端在早期的版本中也会比较突出,比如:Redis复制中断后,从节点会发起psync。
此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时,可能会造成亳秒或秒级的卡顿。
哨兵有哪些功能?
如图,是Redis Sentinel(哨兵)的架构图。Redis Sentinel (哨兵)主要功能包括主节点存活检测、主从运行情况检测、自动故障转移、主从切换。
Redis Sentinel最小配置是一主一从。Redis的Sentinel系统可以用来管理多个Redis服务器。
该系统可以执行以下四个任务:
●监控:不断检查主服务器和从服务器是否正常运行。
●通知:当被监控的某个Redis服务器出现问题,Sentinel通过API脚本向管理员或者其他应用程序发出通知。
●自动故障转移:当主节点不能正常工作时, Sentinel 会开始一次自动的故障转移操作,它会将与失效主节点是主从关系的其中一个从节点升级为新的主节点,并且将其他的从节点指向新的主节点,这样人工干预就可以免了。
●配置提供者:在RedisSentinel模式下,客户端应用在初始化时连接的是Sentinel节点集合,从中获取主节点的信息
感谢你看到了这里!
我这边整理很多2020最新Java面试题(含答案)和Java学习笔记,如下图
========================================================================
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
既已说到spring cloud alibaba,那对于整个微服务架构,如果想要进一步地向上提升自己,到底应该掌握哪些核心技能呢?
就个人而言,对于整个微服务架构,像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等这些都是最最核心的知识,架构师必经之路!下图,是自绘的微服务架构路线体系大纲,如果有还不知道自己该掌握些啥技术的朋友,可根据小编手绘的大纲进行一个参考。
如果觉得图片不够清晰,也可来找小编分享原件的xmind文档!
且除此份微服务体系大纲外,我也有整理与其每个专题核心知识点对应的最强学习笔记:
-
出神入化——SpringCloudAlibaba.pdf
-
SpringCloud微服务架构笔记(一).pdf
-
SpringCloud微服务架构笔记(二).pdf
-
SpringCloud微服务架构笔记(三).pdf
-
SpringCloud微服务架构笔记(四).pdf
-
Dubbo框架RPC实现原理.pdf
-
Dubbo最新全面深度解读.pdf
-
Spring Boot学习教程.pdf
-
SpringBoo核心宝典.pdf
-
第一本Docker书-完整版.pdf
-
使用SpringCloud和Docker实战微服务.pdf
-
K8S(kubernetes)学习指南.pdf
另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!
gBoo核心宝典.pdf
-
第一本Docker书-完整版.pdf
-
使用SpringCloud和Docker实战微服务.pdf
-
K8S(kubernetes)学习指南.pdf
[外链图片转存中…(img-AkuRfUYu-1711184486828)]
另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!
[外链图片转存中…(img-Ooi5Z9c5-1711184486829)]