Redis数据库
简介
Redis是一个开源的高性能键值对存储系统,常用来存储缓存和分布式锁等数据。Redis支持多种数据类型,包括字符串、哈希、列表、集合和有序集合等。Redis通过持久化机制可以将数据保存到磁盘中,同时可以通过主从复制、哨兵机制和集群模式实现高可用、负载均衡等功能。Redis还提供了丰富的API以及可扩展的Lua脚本机制。
数据结构
字符串(Strings)
字符串是Redis中最基本的数据类型,是一个键值对,其中键为一个字符串,值可以是任何类型的字符串或二进制数据。
命令 | 描述 |
---|---|
SET | 设置键值对 |
GET | 获取键对应的值 |
DEL | 删除一个或多个键值对 |
MGET | 获取多个键对应的值 |
哈希(Hashes)
哈希是一个键值对的集合,其中键和值都是字符串类型的。
命令 | 描述 |
---|---|
HSET | 设置hash中的一个字段 |
HGET | 获取hash中指定字段的值 |
HDEL | 删除hash中的一个或多个字段 |
HGETALL | 获取hash中所有字段和值 |
列表(Lists)
列表是一个有序的字符串列表。
命令 | 描述 |
---|---|
LPUSH | 在列表的头部插入一个元素 |
RPUSH | 在列表的尾部插入一个元素 |
LPOP | 移除并返回列表的头部元素 |
RPOP | 移除并返回列表的尾部元素 |
集合(Sets)
集合是一个无序的字符串列表,其中每个元素都是唯一的。
命令 | 描述 |
---|---|
SADD | 向集合中添加一个元素 |
SREM | 从集合中移除一个元素 |
SMEMBERS | 获取集合中所有元素 |
有序集合(Sorted Sets)
有序集合是一个有序的字符串列表,其中每个元素都有一个唯一的分值。
命令 | 描述 |
---|---|
ZADD | 向有序集合中添加一个元素 |
ZREM | 从有序集合中移除一个元素 |
ZRANGE | 获取有序集合中指定范围的元素 |
持久化
Redis提供了两种持久化机制,可以将数据保存到磁盘中,防止数据丢失。
RDB
RDB是一种快照机制,可以将此时Redis数据库的所有数据打包成RDB文件写入磁盘中。RDB文件记录了数据库最后一次生成快照的内容,因此在Redis重新启动时可以通过加载该文件恢复数据。
AOF
AOF是一种追加机制,当Redis的数据被修改时,会将修改操作写入AOF文件中。AOF文件是一个只会追加不会被修改、覆盖的日志文件,可以通过重新执行AOF文件中的命令来恢复数据。
主从复制
Redis通过主从复制实现数据的复制和备份,同时也可以实现读写分离和容灾备份等功能。
主节点
主节点是负责接收客户端写入的指令和修改数据的节点。
从节点
从节点是从主节点中间复制数据的节点,只能读取数据,不能修改数据。
集群模式
Redis集群是一种分布式键值对存储系统,可以通过分片技术将数据存储到多个节点中,实现横向扩展和负载均衡等功能。
节点类型
Redis集群中包含三种节点类型:主节点、从节点和哨兵节点。
分片方案
Redis集群采用分片方案来实现数据分布和负载均衡。Redis集群中的每个节点都存储部分数据,一个key只会存在于其中一个节点中。
故障切换
Redis集群中采用选举机制和自动故障转移机制实现故障切换和容灾备份等功能。
性能调优
Redis的性能调优主要包括以下几方面:
内存相关参数
Redis中的maxmemory、maxmemory-policy以及maxmemory-samples等参数可以控制内存的使用量和操作策略。
TCP NODELAY选项
开启TCP NODELAY选项可以降低TCP发送延迟,提高性能。
减少IO操作
通过禁用AOF、调整持久化频率、减少连接数等方式可以减少多余的IO操作。
高性能网络
使用高性能网络如RDMA可以提高Redis的性能。
安全机制
Redis的安全机制主要包括密码认证、IP过滤、危险命令限制、控制内存使用等方式,可以确保Redis的安全性和稳定性。
高可用架构
Redis的高可用架构主要包括主从复制、哨兵模式和集群模式等机制,可以实现数据备份、读写分离、容灾备份等功能。网上也有文档咨询「Redis High Availability Handbook」,完整阐述Redis高可用方案。