1、Redis 为什么快呢?
悟空拧螺丝 2021-07-13
Redis 为什么快呢?
redis 的速度非常的快,单机的 redis 就可以支撑每秒 10 几万的并发,相对于 mysql 来说,性能是 mysql 的几十倍。速度快的原因主要有几点:
- 完全基于内存操作
- C 语言实现,优化过的数据结构,基于几种基础的数据结构,redis 做了大量的优化,性能极高
- 使用单线程,无上下文的切换成本
- 基于非阻塞的 IO 多路复用机制
2、Redis 的 RDB 是什么?
悟空拧螺丝 2021-07-14
Redis 的 RDB 是什么?
Redis 持久化方案分为 RDB 和 AOF 两种。
RDB 持久化可以手动执行也可以根据配置定期执行,它的作用是将某个时间点上的数据库状态保存到 RDB 文件中,RDB 文件是一个压缩的二进制文件,通过它可以还原某个时刻数据库的状态。由于 RDB 文件是保存在硬盘上的,所以即使 redis 崩溃或者退出,只要 RDB 文件存在,就可以用它来恢复还原数 据库的状态。
可以通过 SAVE 或者 BGSAVE 来生成 RDB 文件。
SAVE 命令会阻塞 redis 进程,直到 RDB 文件生成完毕,在进程阻塞期间,redis 不能处理任何命令请 求,这显然是不合适的。
BGSAVE 则是会 fork 出一个子进程,然后由子进程去负责生成 RDB 文件,父进程还可以继续处理命令请 求,不会阻塞进程。
3、Redis 的 AOF 持久化是什么?
悟空拧螺丝 2021-07-15
Redis 的 AOF 持久化是什么?
AOF 和 RDB 不同,AOF 是通过保存 redis 服务器所执行的写命令来记录数据库状态的。 先执行命令后记录命令。AOF 通过追加、写入、同步三个步骤来实现持久化机制。
- 当 AOF 持久化处于激活状态,服务器执行完写命令之后,写命令将会被追加 append 到 aof_buf 缓 冲区的末尾
- 在服务器每结束一个事件循环之前,将会调用 flushAppendOnlyFile 函数决定是否要将 aof_buf 的 内容保存到 AOF 文件中,可以通过配置 appendfsync 来决定。 AOF 配置项 appendfsync 的三个可选值。
Always,同步写回:每个写命令执行完,立马同步地将日志写回磁盘;数据基本不丢失,性能较差。
Everysec,每秒写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;宕机时丢失 1s 内的数据,性能较好。
No,操作系统控制的写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘;宕机时丢失数据较多。

4、Redis的底层数据有哪些?
悟空拧螺丝 2021-07-16
Redis的底层数据有哪些?
底层数据结构一共有 6 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。
String 类型的底层实现只有一种数据结构,也就是简单动态字符串。而 List、Hash、Set 和 Sorted Set 这四种数据类型,都有两种底层实现结构。

5、Redis 如何实现事务?
悟空拧螺丝 2021-07-17
Redis 如何实现事务?
事务的执行过程包含三个步骤,Redis 提供了 MULTI、EXEC 两个命令来完成这三个步骤。
第一步,客户端要使用一个命令显式地表示一个事务的开启。在 Redis 中,这个命令就是 MULTI。
第二步,客户端把事务中本身要执行的具体操作(例如增删改数据)发送给服务器端。这些操作就是 Redis 本身提供的数据读写命令,例如 GET、SET 等。不过,这些命令虽然被客户端发送到了服务器端,但 Redis 实例只是把这些命令暂存到一个命令队列中,并不会立即执行。
第三步,客户端向服务器端发送提交事务的命令,让数据库实际执行第二步中发送的具体操作。Redis 提供的 EXEC 命令就是执行事务提交的。当服务器端收到 EXEC 命令后,才会实际执行命令队列中的所有命令。

















