- 优化内存统计报告。
- 为许多有子命令的命令增加了HELP子命令。
- 提高了客户端频繁连接和断开连接时的性能表现。
- 升级Jemalloc至5.1版本。
- 新增命令CLIENT ID和CLIENT UNBLOCK。
- 新增了为艺术而生的LOLWUT命令。
- 弃用slave术语(需要API向后兼容的情况例外)。
- 对网络层进行了多处优化。
- 进行了一些Lua相关的改进。
- 新增动态HZ(Dynamic HZ)以平衡空闲CPU使用率和响应性。
- 对Redis核心代码进行了重构并在许多方面进行了改进。
##二 架构
您需要根据业务需求选择:
-
集群架构可轻松突破Redis自身单线程瓶颈,满足大容量、高性能的业务需求。
-
主从架构,提供高性能的缓存服务和数据高可靠。
-
读写分离架构提供高可用、高性能、高灵活的读写分离服务,解决热点数据集中及高并发读取的业务需求,最大化地节约用户运维成本。
##2.1 主从架构-双副本
采用主从(master-replica)模式搭建。主节点提供日常服务访问,备节点提供HA高可用,当主节点发生故障,系统会自动在30秒内切换至备节点,保证业务平稳运行。
可靠性
- 服务可靠采用双机主从(master-replica)架构,主从节点位于不同物理机。主节点对外提供访问,用户可通过Redis命令行和通用客户端进行数据的增删改查操作。当主节点出现故障,HA系统会自动进行主从切换,保证业务平稳运行。
- 数据可靠默认开启数据持久化功能,数据全部落盘。支持数据备份功能,用户可以针对备份集回滚实例或者克隆实例,有效地解决数据误操作等问题。
使用场景
- Redis作为持久化数据存储使用的业务标准版提供持久化机制及备份恢复机制,极大地保证数据可靠性。
- 单个Redis性能压力可控的业务由于Redis原生采用单线程机制,性能在10万QPS以下的业务建议使用。如果需要更高的性能要求,请选用集群版本。
- Redis命令相对简单,排序、计算类命令较少的业务由于Redis的单线程机制,CPU会成为主要瓶颈。如排序、计算类较多的业务建议选用集群版配置。
##2.2 主从架构-单副本
可以在没有数据可靠性要求的纯缓存场景充分发挥性能优势。
使用场景
- 纯缓存类业务场景
单副本版本只有一个数据库节点,节点出现故障时,系统会重新拉起一个Redis进程(没有数据),当节点故障业务自动切换完成后,应用程序需要将数据重新预热,以免对后端数据库产生访问压力冲击。
单副本架构不能提供数据可靠性,如果发生节点故障,您需要重新对业务进行预热,因此,在对数据可靠性要求较高的敏感性业务中,建议选用双副本架构。
- 单个Redis性能压力可控
由于Redis原生采用单线程机制,CPU为单核能力,性能在8万QPS的业务建议使用。如果需要更高的性能要求,请选用集群版配置。
- Redis命令相对简单,排序、计算类命令较少
由于Redis的单线程机制,CPU为主要瓶颈。如排序、计算类较多的业务建议选用集群版配置。
##2.3 集群版-双副本
可轻松突破Redis自身单线程瓶颈,满足大容量、高性能的业务需求。双副本集群版实例采用集群架构,每个分片服务器采用主从(master-replica)双副本模式。集群版支持代理和直连两种连接模式,您可以根据本章节的说明,选择适合业务需求的连接模式。
代理模式
集群架构的本地盘实例默认采用代理(proxy)模式,支持通过一个统一的连接地址(域名)访问Redis集群,客户端的请求通过代理服务器转发到各数据分片,代理服务器、数据分片和配置服务器均不提供单独的连接地址,降低了应用开发难度和代码复杂度。代理模式的服务架构图和组件说明如下。
直连模式
因所有请求都要通过代理服务器转发,代理模式在降低业务开发难度的同时也会小幅度影响Redis服务的响应速度。如果业务对响应速度的要求非常高,您可以使用直连模式,绕过代理服务器直接连接后端数据分片,从而降低网络开销和服务响应时间。直连模式的服务架构和说明如下。
public static void main(String args[]){
JedisPoolConfig config = new JedisPoolConfig();
// 最大空闲连接数, 根据业务需要设置,不能超过实例规格规定的最大的连接数
config.setMaxIdle(200);
// 最大连接数, 根据业务需要设置,不能超过实例规格规定的最大的连接数
config.setMaxTotal(300);
config.setTestOnBorrow(false);
config.setTestOnReturn(false);
// 开通直连访问时申请到的直连地址
String host = “r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com”;
int port = 6379;
// 实例的密码
String password = “xxxxx”;
Set jedisClusterNode = new HashSet();
jedisClusterNode.add(new HostAndPort(host, port));
JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT,
DEFAULT_REDIRECTIONS,password, “clientName”, config);
}
##2.4 集群版-单副本
##2.5 读写分离版
针对读多写少的业务场景,提供高可用、高性能、灵活的读写分离服务,满足热点数据集中及高并发读取的业务需求,最大化地节约运维成本。 读写分离版主要由主备节点、只读节点、Proxy(代理)节点和高可用系统组成。
结局:总结+分享
看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱
- Java互联网工程师面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的 《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
- 程序员代码面试指南–IT名企算法与数据结构题目最优解
- 其余像设计模式,建议可以看看下面这4份PDF(已经整理)
- 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。
以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你!
va基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。
[外链图片转存中…(img-eIemhk99-1714439824439)]
以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你!