1、什么是Redis
Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存、消息代理和流引擎。Redis提供了数据结构,如字符串、哈希、列表、集合、排序集合、范围查询、位图、超日志、地理空间索引和流。Redis具有内置复制、Lua脚本、LRU驱逐、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster提供高可用性和自动分区。
2、Redis能够干什么
缓存:Redis可以将经常使用的数据缓存到内存中,以提高读取速度。它支持各种数据结构的缓存,包括字符串、哈希表、列表、集合和有序集合等。
数据库:Redis可以作为键值存储数据库使用。它支持持久化数据到磁盘,并具有数据复制和故障恢复的功能。它还支持事务,可以保证一组操作的原子性。
消息中间件:Redis内置了发布/订阅系统,可以用于实现消息队列、实时数据推送和事件驱动等场景。
分布式锁:Redis提供了分布式锁的实现,可以用于解决分布式环境下的并发控制问题。
计数器:Redis支持原子操作,可以用于实现计数器功能,比如统计网站访问量、发布量等。
Geo操作:Redis支持地理位置的存储和查询,可以用于实现附近的人、附近的商家等功能。
实时排行榜:Redis支持有序集合,并支持对有序集合进行快速的插入、删除和排序,可以用于实时排行榜的计算和展示。
3 、Redis常见的数据类型
字符串(String):最基本的数据类型,存储二进制安全的字符串。可以进行字符串的读取、修改和删除操作,还可以进行一些特殊的操作,如自增、自减和位操作等。
哈希表(Hash):类似于关联数组,存储字段和对应的值,适合存储对象类型的数据。可以对单个字段进行读取、修改和删除操作,也可以对整个哈希表进行读取、修改和删除操作。
列表(List):有序的字符串列表,可以在列表的两端进行插入和删除操作。可以用来实现队列和栈等数据结构,还可以进行范围查找、修剪和阻塞读取等操作。
集合(Set):无序的字符串集合,不允许重复的元素。支持添加、删除和查询操作,还支持求交集、并集和差集等操作。常用于存储不重复的值和进行高效的集合运算。
有序集合(Sorted Set):与集合类似,但每个元素都关联有一个分数,可用于按分数排序。支持添加、删除和查询操作,还支持按分数范围进行查找和排名操作。常用于实时排名榜和带权重的集合处理。
4、 Redis持久化策略
RDB:它使用快照的形式将当前数据库的数据以二进制格式保存到磁盘文件中。RDB文件是一个经过压缩的二进制文件,它实际上是数据库的快照,记录了某个时间点上数据库的数据。
AOF:它将每个写操作追加到日志文件中,以保证数据的持久化。AOF文件是一个文本文件,记录了Redis服务器接收到的所有写操作指令,包括对数据库进行的写操作、对键的删除操作等。AOF文件中的指令按照顺序排列,以文本形式保存。
1、RDB与AOF 的优缺点
RDB的优点:
- 性能:RDB是周期性将内存中的数据快照到磁盘,只需单一的IO操作,在数据量较大时通常比AOF更快。
- 文件紧凑:RDB文件是经过压缩的二进制文件,文件体积小,节省存储空间。
- 恢复速度快:由于RDB文件存储的是数据库的快照,恢复数据时只需加载一个文件,恢复速度较快。
summary:性能高、速度快、文件小。
RDB的缺点:
- 数据丢失风险:RDB采用周期性的存储方式,如果Redis意外崩溃,最后一次RDB快照至崩溃时的数据会丢失。
- 数据更新不实时:RDB的存储频率较低,数据的更新可能存在较大的时间窗口,如果Redis意外宕机,会丢失最近的更新数据。
summary:存在数据丢失风险。
AOF的优点:
- 数据实时性:AOF以追加的方式记录每次写操作到文件中,相比RDB更能保证数据的实时性。
- 数据完整性:AOF文件记录了所有的写操作,即使Redis意外崩溃,也可以通过回放AOF文件将数据完整恢复。
summary:保证数据实时性与完整性。
AOF的缺点:
- 文件体积大:由于AOF文件是文本文件,文件体积通常比RDB文件大。
- 恢复速度慢:AOF文件包含了所有的写操作,当数据较大时,恢复数据可能比RDB慢。
- 性能:AOF文件的写入性能相对较低,对于高并发的写操作对性能有一定的影响。
summary:性能底、速度慢、文件大。
2、官方建议如何使用持久化策略
3、RDB与AOF工作原理
summary:父进程创建子进程,子进程将数据写入rdb文件,新的rdb文件替换旧的rdb文件。
summary: 父进程、子进程同是在各自的AOF文件上进行写操作,最终构建临时清单并持久化。