一、Redis介绍
Redis是一种高性能的键值存储系统,广泛应用于缓存、消息队列和数据库场景
1. 关系数据库和非关系型数据库
(1) 关系数据库
关系数据库(如MySQL、PostgreSQL)基于关系模型,使用结构化查询语言(SQL)进行数据管理。数据存储在表中,表之间通过外键建立关系。例如,用户表(Users)和订单表(Orders)可以通过用户ID关联。优势包括事务支持(ACID属性)和复杂查询能力,但扩展性较差,处理高并发场景时性能可能受限
(2) 非关系型数据库
非关系型数据库(NoSQL,如Redis、MongoDB)不使用固定表结构,支持灵活的数据模型(如键值对、文档、图)。它们通常为分布式设计,适合处理大规模数据和高并发访问。优势包括水平扩展性强、读写性能高(例如,Redis的读操作时间复杂度为O(1)),但牺牲了部分事务一致性
2. Redis基础
(1) Redis简介
Redis(Remote Dictionary Server)是一个开源的内存数据结构存储,支持字符串、哈希、列表、集合等数据类型。它可用作数据库、缓存或消息代理,核心优势是内存操作速度快(读写在微秒级),并支持持久化到磁盘。Redis是单线程模型,避免了锁竞争,时间复杂度低(如GET命令为O(1))
(2) Redis安装部署
安装Redis可通过包管理器(如apt或yum)或源码编译。以下是在Linux系统上的基本步骤:
bash
# 使用apt安装
sudo apt update
sudo apt install redis-server
# 启动Redis服务
sudo systemctl start redis-server
部署后,可通过redis-server启动服务,默认端口6379
(3) 配置参数
配置文件(redis.conf)控制Redis行为。主要参数包括:
port 6379:设置监听端口
bind 127.0.0.1:绑定IP地址(改为0.0.0.0可允许远程访问)
maxmemory <bytes>:设置内存上限(如maxmemory 1gb)
save <seconds> <changes>:配置RDB持久化(例如save 900 1表示900秒内至少1次变更时保存快照)
二、Redis命令工具
Redis提供多种工具来管理和测试数据库
(1) redis-cli命令行工具
redis-cli是交互式命令行接口,用于连接Redis服务器和执行命令。例如:
bash
# 连接本地Redis
redis-cli
# 设置键值对
SET key1 "Hello"
GET key1 # 返回 "Hello"
常用命令包括PING(测试连接)、INFO(获取服务器信息)
(2) Redis-benchmark测试工具
redis-benchmark用于性能测试,模拟并发请求。例如:
bash
# 测试100个并发客户端的GET命令
redis-benchmark -c 100 -t get
输出包括每秒请求数(QPS),帮助评估性能瓶颈(如网络延迟或内存限制)
三、Redis数据库常用命令
以下是一些常用命令,时间复杂度以LaTeX格式表示:
SET key value:设置键值对,时间复杂度O(1)
GET key:获取键值,时间复杂度O(1)
DEL key:删除键,时间复杂度O(1)
EXPIRE key seconds:设置键过期时间,时间复杂度O(1)
KEYS pattern:查找匹配模式的键(谨慎使用,时间复杂度O(n),n为键数量)
FLUSHDB:清空当前数据库,时间复杂度O(n)
四、Redis持久化
持久化机制确保数据在重启后不丢失,Redis支持RDB和AOF两种方式
1. RDB和AOF的区别
RDB:周期性生成数据快照(snapshot),文件小,恢复快。适合备份和灾难恢复
AOF:记录所有写操作命令(日志追加),数据更安全,但文件较大。支持实时持久化
2. RDB和AOF的缺点
RDB缺点:可能丢失最后一次快照后的数据(如服务器崩溃)。快照过程可能阻塞主线程(时间复杂度O(n),n为数据量)
AOF缺点:文件大小增长快(需定期重写),写入性能略低(因日志追加操作)
3. Redis持久化配置
(1) RDB持久化配置
在redis.conf中设置:
conf
save 900 1 # 900秒内至少1次变更时保存
save 300 10 # 300秒内至少10次变更时保存
dbfilename dump.rdb # 快照文件名
手动触发命令:SAVE(阻塞式)或BGSAVE(后台执行)
(2) AOF持久化配置
启用AOF:
conf
appendonly yes
appendfsync everysec # 每秒同步一次(平衡性能和安全)
appendfsync选项:always(每次写都同步,安全但慢)、everysec(折中)、no(由操作系统决定)
4. AOF重写
AOF重写压缩日志文件,移除冗余命令。手动触发:BGREWRITEAOF。自动配置:
conf
auto-aof-rewrite-percentage 100 # 当AOF文件大小增长100%时触发
auto-aof-rewrite-min-size 64mb # 最小文件大小阈值
重写过程在后台进行,不影响主线程
五、性能管理
优化Redis性能需关注监控、配置和资源管理:
监控工具 :使用INFO命令或第三方工具(如Prometheus)监控指标(如内存使用、QPS)
调优参数:
设置maxmemory-policy(如allkeys-lru)避免内存溢出
调整timeout参数(如timeout 300)关闭空闲连接
性能瓶颈 :常见问题包括网络延迟(优化客户端连接池)、内存碎片(启用jemalloc),或单线程阻塞(避免长耗时命令,如KEYS *)
基准测试 :使用redis-benchmark定期测试,确保QPS符合预期(目标值可设为10\^4以上)