一、redis简介
Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,常用作数据库、缓存和消息中间件。它以高性能和丰富的数据结构支持而闻名,提供了字符串、哈希表、列表、集合、有序集合等多种数据结构。
Redis主要特点包括:
- 内存存储:Redis将数据存储在内存中,因此具有快速的读写性能。同时,它也支持将数据持久化到硬盘上,以防止数据丢失。
- 高性能:Redis使用基于内存的数据结构和异步I/O操作,使得它能够处理大量的并发请求,并具有低延迟。
- 多种数据结构:除了常规的字符串类型,Redis还支持哈希表、列表、集合、有序集合等多种复杂数据结构,使得开发者可以更灵活地使用数据。
- 发布订阅:Redis支持发布订阅模式,允许消息的发布者和订阅者之间进行实时的消息传输,可用于构建实时通信系统或消息队列。
- 扩展性:Redis支持主从复制和分片技术,可以通过横向扩展来提高系统的吞吐量和容量。
- 丰富的功能:Redis还提供了诸如事务、持久化、过期时间、数据备份与恢复等功能,使得它成为一个功能强大的数据存储和处理工具。
总之,Redis是一款高性能、灵活且功能丰富的内存数据存储系统,被广泛应用于各种场景,包括缓存、实时计算、排行榜、消息队列等。
二、redis安装
ubuntu下使用命令安装:
sudo apt update
sudo apt install redis-server
sudo systemctl start redis
启动完成后查询是否redis服务存在
ps aux | grep 6379
如果结果不止一条即成功。
三、redis的五种数据结构
- String(字符串):存储一个字符串或一个整数。最大能存储的数据量为512MB。
- Hash(哈希表):由多个键值对组成,类似于关联数组。适合存储对象类型数据,如用户信息等。
- List(列表):双向链表结构,支持在头部和尾部进行快速的增加、删除操作。适合实现消息队列、任务队列等场景。
- Set(集合):无序、不重复的元素集合。支持多种集合操作,如并集、交集等。适合实现标签系统、好友关系等场景。
- Sorted Set(有序集合):与Set类似,但是每个元素都有一个分数属性,用于排序。适合实现排行榜等场景。
四、redis的发布-订阅功能
Redis支持发布-订阅(Pub/Sub)模式,它是一种消息传递模式,可以用于构建实时通信系统、消息队列等场景。在这种模式下,消息的发布者(Publisher)将消息发送到一个频道(Channel),而消息的订阅者(Subscriber)则可以订阅这个频道来接收消息。
具体的实现流程如下:
- Publisher将消息发送到指定的频道。
- Redis服务器将该消息推送给所有已经订阅了该频道的Subscriber。
- Subscriber接收到消息并进行处理。
使用Redis的发布-订阅模式,可以实现高效的消息传递,同时也可以实现广播和单播等多种消息传递方式。此外,Redis还提供了PUBLISH、SUBSCRIBE、UNSUBSCRIBE等命令来实现发布-订阅功能。
五、事务
Redis事务的使用流程如下:
- 开启事务:使用MULTI命令来开启一个事务。
- 执行事务命令:在MULTI和EXEC之间,可以依次执行多个命令,这些命令都会被加入到事务队列中,但不会立即执行。
- 提交事务:使用EXEC命令来提交事务,Redis会按照执行顺序依次执行事务队列中的命令。
需要注意的是redis的事务和关系型数据库的事务是不一样的,关系型事务要么全部命令执行成功,要么全部失败,而redis可能部分成功,部分失败。
且在开启一个事务后,若未执行EXEC,此时其他客户端是会被阻塞访问该内容的。
六、持久化
- RDB持久化:RDB是将Redis的内存数据以快照的形式保存到磁盘上的二进制文件。它可以通过配置文件设置自动触发的快照保存,也可以手动执行SAVE或BGSAVE命令进行快照保存。RDB持久化具有快速、紧凑和恢复性好的特点,适用于备份和灾难恢复。
- AOF持久化:AOF是将Redis的写命令以追加的方式记录到一个文件中,记录的内容是可以恢复数据状态的。AOF持久化可以通过配置文件设置自动触发的频率,也可以手动执行BGREWRITEAOF命令进行重写。AOF持久化具有数据丢失较少的特点,适用于需要稍微牺牲一些性能来换取数据安全性的场景。
七、主从复制
主从复制的基本原理如下:
- 从节点连接到主节点并发送SYNC命令,请求进行全量复制。
- 主节点接收到SYNC命令后,会生成并发送RDB文件或者使用内存快照保存当前数据状态,并将保存的数据发送给从节点。
- 从节点接收到主节点发送的数据后,会先清空自己的数据,然后加载主节点发送的数据,恢复到与主节点一致的状态。
- 主节点继续处理写操作,同时将写操作发送给所有连接的从节点。
- 从节点接收到主节点发送的写操作后,会执行相同的操作,保持与主节点的数据一致。
主从复制的优势包括:
- 高可用性:当主节点发生故障时,可以快速切换到从节点作为新的主节点,实现故障转移。
- 负载均衡:可以将读操作分摊到多个从节点上,减轻主节点的读压力,提高整体性能。
- 数据备份:从节点可以作为主节点的数据备份,提供数据冷备份和容灾的功能。
八、哨兵模式
Redis哨兵模式是一种用于监控和自动故障恢复的高可用性解决方案,适用于Redis主从复制架构中。哨兵模式通过监控Redis实例的健康状态,并在主节点故障时自动进行故障转移,以确保系统的高可用性。
在Redis哨兵模式中,通常会有多个哨兵进程运行,它们会相互通信并监控Redis实例的运行情况。当主节点出现故障时,哨兵会自动选举一个从节点作为新的主节点,并协调其他从节点切换到新的主节点上,从而实现自动故障转移。
哨兵模式的核心功能包括以下几点:
- 监控:哨兵会定期检测Redis实例的健康状态,包括主节点和从节点的可用性。
- 自动故障检测:当主节点出现故障或不可达时,哨兵会发现故障并触发故障转移流程。
- 故障转移:在发现主节点故障后,哨兵会选举一个合适的从节点作为新的主节点,并通知其他从节点切换到新的主节点上。
- 配置提供者:哨兵可以向客户端提供最新的Redis配置信息,包括主节点和从节点的地址,帮助客户端自动感知故障转移后的变化。