介绍一下Redis
Redis 是一款使用 C 语言编写的高性能 key-value 数据库,开源免费,遵守 BSD 协议。
特点:
- 性能极高,能到 100000 次/s 读写速度
- 支持数据的持久化,对数据的更新采用Copy-on-write技术,可以异步地保存到磁盘上
- 丰富的数据类型,String(字符串)、List(列表)、Hash(字典)、Set(集合)、Sorted Set(有序集合)
- 原子性:Redis 的所有操作都是原子性的,多个操作通过 MULTI 和 EXEC 指令支持事务
- 丰富的特性:key 过期、publish/subscribe、notify
- 支持数据的备份,快速的主从复制
- 节点集群,很容易将数据分布到多个Redis实例中
Redis 支持五种数据类型
- string:字符串
- hash:哈希
- list:列表
- set:集合
- sorted set:有序集合
Redis有哪些优缺点?
优点:
- 性能极高,能到 100000 次/s 读写速度
- 支持数据的持久化,对数据的更新采用Copy-on-write技术,可以异步地保存到磁盘上
- 丰富的数据类型,String(字符串)、List(列表)、Hash(字典)、Set(集合)、Sorted Set(有序集合)
- 原子性:Redis 的所有操作都是原子性的,多个操作通过 MULTI 和 EXEC 指令支持事务
- 丰富的特性:key 过期、publish/subscribe、notify
- 支持数据的备份,快速的主从复制
- 节点集群,很容易将数据分布到多个Redis实例中
缺点:
- 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写
- 适合的场景主要局限在较小数据量的高性能操作和运算上
Redis使用单线程模型为什么性能依然很好?
- 避免了线程切换的资源消耗
- 单线程不存在资源共享与竞争,不用考虑锁的问题
- 基于内存的,内存的读写速度非常快
- 使用非阻塞的 IO 多路复用机制
- 数据存储进行了压缩优化
- 使用了高性能数据结构,如 Hash、跳表等
Redis各数据类型最大容量是多少?
- Strings:一个 String 类型的 value 最大可以存储512M
- Lists:元素个数最多为 2^32-1 个,即 4294967295 个
- Sets:元素个数最多为 2^32-1 个,即 4294967295 个
- Hashes:键值对个数最多为 2^32-1 个,即 4294967295 个
- Sorted sets类型:同 Sets
Redis持久化机制有哪些?各有什么优缺点?
Redis 提供两种持久化机制: RDB 和 AOF
RDBRedis DataBase:
指用数据集快照的方式半持久化模式,记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,可恢复数据
优点:
- 只有一个文件 dump.rdb,恢复操作简单,容灾性好
- 性能较高,fork 子进程进行写操作,主进程继续处理命令
- 大数据集比 AOF 的恢复效率高
缺点:
- 数据安全性低,RDB 是每间隔一段时间进行持久化,若期间 redis 发生故障,可能会发生数据丢失
AOFAppend-only file
指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储,保存为 aof 文件
优点:
- 数据安全,aof 持久化可以配置 appendfsync 属性为 always,记录每个命令操作到 aof 文件中一次;通过 append 模式写文件,即使中途服务器宕机,也可以通过 redis-check-aof 工具解决数据一致性问题
- AOF 机制的 rewrite 模式,AOF 文件没被 rewrite 之前可以进行处理,如删除文件中的 flushall 命令
缺点:
- AOF 的持久化文件比 RDB 大,恢复速度慢