1. 介绍
Redis(Remote Dictionary Server)是一个开源的、高性能的、键值存储数据库,常用作数据库、缓存和消息中间件,它支持多种类型的数据结构,如字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)、哈希(hashes)、位图(bitmaps)、超日志(hyperloglogs)、地理空间(geospatial)索引半径查询以及流(streams)。
特点:
支持数据的持久化,可以将内存中的数据保存到硬盘,在重启后再次加载使用。
支持的数据结构丰富,String,list,set, zset, hash等等。
支持数据备份,master-slave模式进行数据备份。
优势:
性能高,Redis能读的速度是110000次/s,写的速度是81000次/s。
数据类型丰富
原子性,redis中所有操作都是原子的,并且多个操作也支持原子性
丰富的特性,如通知,key过期等。
2. 核心特性
-
速度快:Redis将所有数据存储在内存中,对数据的读写速度非常快,读写速度可达每秒数十万次。
-
持久化:Redis支持两种持久化方法:RDB(Redis Database)在指定的时间间隔内执行数据集的时间点快照,AOF(Append Only File)记录每个写操作命令,这两种机制可以保证数据不会因为服务器故障而丢失。
-
可配置的持久化策略:使用RDB、AOF或两者结合来满足不同程度的持久性需求。
-
事务:Redis事务可以将多个命令打包,然后一次性、顺序地执行,并且中间不会插入其他客户端命令。
-
多种语言客户端:几乎所有流行语言都有Redis的客户端库。
-
支持复杂的数据结构:不仅仅只有简单的键值对,还有list、set、zset(有序集合)、hash等复杂数据结构。
-
发布/订阅:客户端可以订阅任意数量的频道,然后接收发布到这些频道的消息。
-
高可用与分布式:通过Redis Sentinel提供高可用性,并且通过Redis Cluster提供自动分区。
3. 数据类型
-
String(字符串):字符串类型是最基本的数据类型,它可以包含任何数据,如JPEG图像或序列化的对象。
-
Hash(哈希):是一个键值对集合,特别适合用于存储对象。
-
List(列表):是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部或尾部。
-
Set(集合):是字符串的无序收集,通过HashTable实现,可以快速判断一个元素是否在一个集合内。
-
Sorted Set(有序集合):和无序集合一样也是字符串集合,不同的是每个元素都会关联一个double类型的分数,Redis正是通过分数来为集合中的成员进行从小到大的排序。
-
Bitmaps(位图):通过提供二进制位操作的数据类型,可以实现更高效的空间利用。
-
HyperLogLogs:是用来做基数统计的算法,允许你使用极小的内存空间来统计唯一元素的数量。
-
Geospatial(地理空间):Redis可以让你存储地理空间信息,并能通过半径查询项在这些数据中进行检索。
-
Streams:是为了实现两个或多个客户端之间的消息流,它是Redis中一种新的应用模式。
4. 持久化选项
-
RDB(快照):在指定的时间间隔内对你的数据进行快照存储。
-
AOF(日志):记录每个接收的写操作命令,并在服务器启动时,通过重新执行这些命令来恢复数据。
5. 高可用与分布式
-
Redis Sentinel:管理多个Redis服务器的系统,提供故障转移、监测和配置提供者服务。
-
Redis Cluster:分布式的解决方案,可以自动将数据分布在多个节点之间,并提供数据冗余和故障转移功能。
6. 安全与性能
-
安全:作为一个内存存储系统,Redis支持身份验证和基于角色的访问控制列表(ACLs)。
-
性能:Redis设计用来运行在受信任的网络内部,所以减少了很多不必要的延迟,并且能够提供高速的性能。
7. 用途和场景
Redis因其速度和灵活性,广泛应用于多种场景:
名称 | 介绍 |
---|---|
缓存系统 | 由于其速度快,经常被用来作为信息的缓存,减少数据库访问次数,提高速度。 |
会话存储 | 在Web应用中,如用户登录会话等。 |
消息队列 | 利用list结构作为消息队列,支持多种消息队列协议。 |
排行榜/计数器 | 例如游戏中的分数排行榜等。 |
发布/订阅消息系统 | 构建实时消息系统。 |
基数统计 | 用HyperLogLogs来高效统计唯一对象的数量。 |
8. 结论
Redis是一种高性能键值对数据库,适用于解决各种问题,包括用作缓存以减轻后端数据库负载、存储临时数据等,不过由于其基于内存的特性,使用时需要注意数据的备份和恢复策略,以防止可能出现的数据丢失。