2021 年上半年最接地气的 Java 面经
Redis 常用的数据类型
Redis 的五种常用的数据类型分别是:String、Hash、List、Set 和 Sorted set
Redis 的使用场景
1.Counting(计数)2.展示最近、最热、点击率最高、活跃度最高等等条件的 top list3.用户最近访问记录也是 redis list 的很好应用场景 4.通过 list 的 lpop 及 lpush 接口进行队列的写入和消费 5.Redis 的 Lua 的功能扩展实际给 Redis 带来了更多的应用场景,你可以编写若干 command 组合作为一个小型的非阻塞事务或者更新逻辑 6.Redis 提供的主从数据同步功能,其实是对 cache 的一个强有力功能扩展
小结
如此多的应用无非离不开 Redis 的所有特性
揭开 Redis 的神秘面纱
Redis 是一个开源(KEY-VALUE 键值对),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。采用单进程单线程模型,并发能力强大,是当前互联网架构中主流的分布式缓存工具。
Redis 高性能缓存架构设计
1.架构设计
由于 redis 是单点,项目中需要使用,必须自己实现分布式。基本架构图如下所示:
2.分布式实现
通过 key 做一致性哈希,实现 key 对应 redis 结点的分布。
一致性哈希的实现:
hash 值计算:通过支持 MD5 与 MurmurHash 两种计算方式,默认是采用 MurmurHash,高效的 hash 计算。
一致性的实现:通过 java 的 TreeMap 来模拟环状结构,实现均匀分布
3.client 的选择
对于 jedis 修改的主要是分区模块的修改,使其支持了跟据 BufferKey 进行分区,跟据不同的 redis 结点信息,可以初始化不同的 ShardInfo,同时也修改了 JedisPool 的底层实现,使其连接 pool 池支持跟据 key,value 的构造方法,跟据不同 ShardInfos,创建不同的 jedis 连接客户端,达到分区的效果,供应用层调用
4.模块的说明
脏数据处理模块,处理失败执行的缓存操作。
屏蔽监控模块,对于 jedis 操作的异常监控,当某结点出现异常可控制 redis 结点的切除等操作。
整个分布式模块通过 hornetq,来切除异常 redis 结点。对于新结点的增加,也可以通过 reload 方法实现增加。(此模块对于新增结点也可以很方便实现)
最后
作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及 PDF 的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料,如果**‘你’确定好自己未来的道路或者想学习提升自己技术栈、技术知识的小伙伴们可以点击这里来获取免费学习资料提升自己(全套面试文档、PDF、进阶架构视频)**
评论