面试题答案
一键面试- 原理:
- Redis的有序集合(Sorted Set)底层数据结构是跳跃表(Skip List)和字典(Dict)。当多个元素分数相同时,在跳跃表中按照字典序进行排序。
- 插入新元素或更新已有元素分数时,为维持有序性,跳跃表需要调整节点位置,而字典用于快速定位元素,保证操作的时间复杂度。
- 实现方式:
- 插入新元素:
- 先在字典中检查元素是否已存在,如果不存在,则在跳跃表中找到合适的插入位置。由于分数相同按字典序,会在相同分数元素中找到合适的字典序位置插入新节点。同时更新跳跃表的高度、层数等相关属性。
- 插入后字典添加新元素与节点的映射,保证可以通过元素快速定位跳跃表节点。
- 更新已有元素分数:
- 首先通过字典快速定位到跳跃表中的节点。
- 如果新分数与旧分数不同,从跳跃表中删除该节点,再根据新分数在跳跃表中找到合适位置插入,这个过程同样要考虑相同分数下的字典序问题。
- 更新字典中元素与新节点的映射关系,确保数据一致性。
- 插入新元素: