Redis-八股文
1. 什么是 Redis?
Redis 是基于内存的 Key-Value 非关系型数据库。开源,并且遵循 BSD 协议。
- Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis 不仅仅支持简单的 key - value 类型的数据,同时还提供 list、set、zset、hash 等数据结构的存储。
- Redis 支持数据的备份,即 master-slave 模式(主从模式)的数据备份。
- 主从模式介绍:Redis 的主从模式跟 MySQL 主从复制原理差不多,主从复制中,数据库分为两类:主数据库(master)和从数据库(slave)。
- 主数据库可以进行读写操作,从库只能进行读操作(可以配置从库支持读写操作,不建议)。
- 当主数据库的读写操作导致数据库变化时会自动将数据同步从数据库。
- 主从数据库可以是一主多从,即一个 master 可以拥有多个 slave,但只能一从一主,即一个 slave 只能对应一个 master。
- slave 挂了之后,不影响其它 slave 和 master 读写,重新启动 slave 之后会自动从 master 同步数据过来。
- master 挂了之后,不影响 slave 读,但 Redis 不再提供写服务,master 重启后 Redis 将重新对外提供写服务。
- master 挂了之后,不会在 slave 节点中重新选一个 master。
- 主从模式介绍:Redis 的主从模式跟 MySQL 主从复制原理差不多,主从复制中,数据库分为两类:主数据库(master)和从数据库(slave)。
-
Redis 优势
- 性能极高 - Redis 能读的速度是 110000 次 / s,写的速度是 81000 次 / s。
- 丰富的数据类型 - Redis 支持二进制案例的 Strings、Lists、Hashes、Sets 及 Ordered Sets 数据类型操作。
- 原子性 - Redis 的所有操作都是原子性,意思就是要么成功执行要么失败完全不执行。单个操作是原子的,多个操作也支持事务,即原子性。通过 MULTI 和 EXEX 指令包起来。
- 丰富的特性 - Redis 还支持 publish / subscribe、通知、key 过期等等特性。
-
Redis 与其它 key - value 存储有什么不同?
- Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其它数据库的进化路径。Redis 的数据类型都是基于基本数据类型的,同时对程序员透明,无需进行额外的抽象。
- Redis 运行在内存中但是可以持久化到磁盘,所以在对不同的数据集进行高速读写时需要权衡内存,因为数据量不能大于硬盘内存。在内存数据库房门的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样 Redis 可以做很多内部复杂性很强的事情。同时,在磁盘格式房门他们是紧凑的以追加的方式产生的,因为它们并不需要进行随机访问
2. Redis 的数据类型?
Redis 支持五种数据结构:string (字符串)、hash(哈希)、list(列表)、set(集合) 及 zset sorted set (有序集合)。
我们实际项目中比较常用的是 string、hash。如果你是 Redis 中高级用户,还需要加上下面几种数据结构 HyperLogLog、Geo、Pub/Sub。
3. 使用 Redis 有哪些好处?
- 速度快 - 因为数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是 O1。
- 支持丰富数据类型,支持 string、list、set、Zset、hash 等。
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。
- 丰富的特性:可用于缓存,消息,按 key 设置过期时间,过期后将会自动删除。
4. Redis 相比 Memcached 有哪些优势?
- Memcached 所有的值都均是简单的字符串,Redis 作为其替代者,支持更为丰富的数据类
- Redis 的速度比 Memcached 快很多
- Redis 可以持久化数据
5. Memcached 于 Redis 有哪些区别?
- 存储方式 Memcached 把数据全部存储在内存中,断电后会挂掉,数据不能超过内存大小。Redis 有部分存在硬盘上,这样能保存数据的持久性。
- 数据支持类型 Memcache 对数据类型支持相对简单,Redis 有复杂的数据类型。
- 使用底层模型不同,它们之间底层实现方式,以及与客户端之间通信的应用协议不一样。Redis 直接构建了 VM 机制。因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
6. Redis 是单进程单线程的?
Redis 是单进程单线程的,Redis 利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。
7. 一个字符串的值能存储最大容量是多少?
512M
8. Redis 的持久化机制是什么?各自的优缺点?
Redis 提供两种持久化机制 RDB 和 AOF 机制:
- RDB (Redis DataBase)持久化方式:是指用数据集快照的方式半