跳至主要內容
Redis为什么用跳表实现有序集合

前言

近几年针对 Redis 面试时会涉及常见数据结构的底层设计,其中就有这么一道比较有意思的面试题:“Redis 的有序集合底层为什么要用跳表,而不用平衡树、红黑树或者 B+树?”。

本文就以这道大厂常问的面试题为切入点,带大家详细了解一下跳表这个数据结构。

本文整体脉络如下图所示,笔者会从有序集合的基本使用到跳表的源码分析和实现,让你会对 Redis 的有序集合底层实现的跳表有着更深刻的理解和掌握。


Guide大约 24 分钟数据库Redis
SQL常见面试题总结(2)

题目来源于:牛客题霸 - SQL 进阶挑战

增删改操作

SQL 插入记录的方式汇总:

  • 普通插入(全字段)INSERT INTO table_name VALUES (value1, value2, ...)
  • 普通插入(限定字段)INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)
  • 多条一次性插入INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...), ...
  • 从另一个表导入INSERT INTO table_name SELECT * FROM table_name2 [WHERE key=value]
  • 带更新的插入REPLACE INTO table_name VALUES (value1, value2, ...)(注意这种原理是检测到主键或唯一性索引键重复就删除原记录后重新插入)

Guide大约 14 分钟数据库数据库基础SQL
SQL常见面试题总结(3)

题目来源于:牛客题霸 - SQL 进阶挑战

较难或者困难的题目可以根据自身实际情况和面试需要来决定是否要跳过。

聚合函数

SQL 类别高难度试卷得分的截断平均值(较难)

描述: 牛客的运营同学想要查看大家在 SQL 类别中高难度试卷的得分情况。


Guide大约 39 分钟数据库数据库基础SQL
SQL常见面试题总结(4)

题目来源于:牛客题霸 - SQL 进阶挑战

较难或者困难的题目可以根据自身实际情况和面试需要来决定是否要跳过。

专用窗口函数

MySQL 8.0 版本引入了窗口函数的支持,下面是 MySQL 中常见的窗口函数及其用法:


Guide大约 22 分钟数据库数据库基础SQL
Redis持久化机制详解

使用缓存的时候,我们经常需要对内存中的数据进行持久化也就是将内存中的数据写入到硬盘中。大部分原因是为了之后重用数据(比如重启机器、机器故障之后恢复数据),或者是为了做数据同步(比如 Redis 集群的主从节点通过 RDB 文件同步数据)。

Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持 3 种持久化方式:

  • 快照(snapshotting,RDB)
  • 只追加文件(append-only file, AOF)
  • RDB 和 AOF 的混合持久化(Redis 4.0 新增)

Guide大约 14 分钟数据库Redis
MySQL查询缓存详解

缓存是一个有效且实用的系统性能优化的手段,不论是操作系统还是各种软件和网站或多或少都用到了缓存。

然而,有经验的 DBA 都建议生产环境中把 MySQL 自带的 Query Cache(查询缓存)给关掉。而且,从 MySQL 5.7.20 开始,就已经默认弃用查询缓存了。在 MySQL 8.0 及之后,更是直接删除了查询缓存的功能。

这又是为什么呢?查询缓存真就这么鸡肋么?

带着如下几个问题,我们正式进入本文。

  • MySQL 查询缓存是什么?适用范围?
  • MySQL 缓存规则是什么?
  • MySQL 缓存的优缺点是什么?
  • MySQL 缓存对性能有什么影响?

Guide大约 11 分钟数据库MySQL