开头
在找工作的过程中,对于 Redis 技术知识的掌握已经成为必须的技能。美团面试常常就会被问到Redis相关知识,而这次我就差点倒在了美团3面,面试官连问我以下几个Redis的问题,然后就卡壳了…
-
redis了解吗?你说说怎么用redis实现分布式锁?
-
Redis常用数据结构及底层数据结构实现
-
如何解决 Redis 的并发竞争 Key 问题
-
如何保证缓存与数据库双写时的数据一致性?
剩下的不太记得了…为此面试完回来针Redis专门做了一个面试问题大总结

DLedgerCommitlog 继承自 Commitlog。让我们一一来看一下它的核心属性。
- DLedgerServer dLedgerServer
基于 raft 协议实现的集群内的一个节点,用 DLedgerServer 实例表示。
- DLedgerConfig dLedgerConfig
DLedger 的配置信息。
- DLedgerMmapFileStore dLedgerFileStore
DLedger 基于文件映射的存储实现。
- MmapFileList dLedgerFileList
DLedger 所管理的存储文件集合,对比 RocketMQ 中的 MappedFileQueue。
- int id
节点ID,0 表示主节点,非0表示从节点
- MessageSerializer messageSerializer
消息序列器。
- long beginTimeInDledgerLock = 0
用于记录 消息追加的时耗(日志追加所持有锁时间)。
- long dividedCommitlogOffset = -1
记录的旧 commitlog 文件中的最大偏移量,如果访问的偏移量大于它,则访问 dledger 管理的文件。
- boolean isInrecoveringOldCommitlog = false
是否正在恢复旧的 commitlog 文件。
接下来我们将详细介绍 DLedgerCommitlog 各个核心方法及其实现要点。
[](()3.2 构造方法
public DLedgerCommitLog(final DefaultMessageStore defaultMessageStore) {
super(defaultMessageStore); // @1
dLedgerConfig = new DLedgerConfig();
dLedgerConfig.setEnableDiskForceClean(defaultMessageStore.getMessageStoreConfig().isCleanFileForciblyEnable());
dLedgerConfig.setStoreType(DLedgerConfig.FILE);
dLedgerConfig.setSelfId(defaultMessageStore.getMessageStoreConfig().getdLegerSelfId());
dLedgerConfig.setGroup(defaultMessageStore.getMessageStoreConfig().getdLegerGroup());
dLedgerConfig.setPeers(defaultMessageStore.getMessageStoreConfig().getdLegerPeers());
dLedgerConfig.setStoreBaseDir(defaultMessageStore.getMessageStoreConfig().getStorePathRootDir());
dL

本文介绍了如何在面试中准备Redis相关知识,并详细探讨了RocketMQ整合DLedger(多副本)的过程,包括DLedgerCommitlog的构造方法、load和recover方法的实现,强调了在主从切换中的平滑升级设计技巧。内容涵盖了DLedgerServer、DLedgerConfig的配置以及如何处理旧commitlog文件。
最低0.47元/天 解锁文章
431

被折叠的 条评论
为什么被折叠?



