一、 适用场景
-
典型场景:数据量小、查询(尤其是读操作)极其频繁的应用。
-
具体案例:首页广告、热点资讯、秒杀库存、会话缓存等。
-
为什么用Redis:
-
MySQL瓶颈:数据存储在硬盘,面对高并发(如每秒数万次查询)时,I/O会成为性能瓶颈。
-
Redis优势:数据主要存储在内存中,读写速度极快(读:~110,000次/秒,写:~81,000次/秒),能轻松支撑高并发访问。
-
二、 Redis简介
Redis 是一个用 C 语言编写的、高性能的键值对(Key-Value)数据库。它将数据主要存储在内存中,因此具备极高的读写性能。它支持多种数据结构(字符串、哈希、列表、集合、有序集合等),并提供了持久化、主从复制、事务等功能。
三、 安装与启动(以3.0.0为例)
-
上传并解压 :
tar -zxvf redis-3.0.0.tar.gz -
安装依赖 :
yum install gcc-c++ -
编译安装 :进入解压目录,执行
make然后make install PREFIX=/usr/local/redis -
配置 :拷贝配置文件
redis.conf到安装目录的bin/下,并修改daemonize yes以支持后台运行。 -
启动 :
./redis-server redis.conf -
连接测试 :
./redis-cli -
关闭 :
./redis-cli shutdown
四、 基本命令
-
keys *:查看所有键。 -
exists key:判断键是否存在。 -
expire key seconds/ttl key:设置/查看键的过期时间。 -
incr key/decr key:对数值型键值进行原子性的自增/自减。
五、 多数据库
-
一个Redis实例默认提供16个数据库(编号0-15),可通过
SELECT index切换。 -
FLUSHDB:清空当前数据库。 -
FLUSHALL:清空所有数据库。
六、 持久化(核心机制)
Redis 提供了两种主要的持久化方式,将内存数据保存到磁盘以防数据丢失。
-
RDB (Redis DataBase)
-
机制 :在指定时间间隔内,将内存中的数据集快照 写入磁盘二进制文件(默认
dump.rdb)。 -
触发策略 (在
redis.conf中配置):-
save 900 1(900秒内至少有1个key变化) -
save 300 10(300秒内至少有10个key变化) -
save 60 10000(60秒内至少有10000个key变化)
-
-
优点:性能影响小,恢复大数据集速度快。
-
缺点:可能丢失最后一次快照之后的数据(数据完整性有损)。
-
-
AOF (Append Only File)
-
机制 :记录每一次写操作命令,以日志形式追加到文件(默认
appendonly.aof)中。 -
同步策略 (
appendfsync):-
always:每次写都同步,最安全,性能最低。 -
everysec:每秒同步一次(默认),平衡了性能和安全。 -
no:由操作系统决定,性能好,安全性低。
-
-
优点 :数据完整性高,最多丢失一秒数据(
everysec策略下)。 -
缺点:AOF文件体积通常比RDB大,恢复速度较慢,对性能有一定影响。
-
小结:RDB 适用于可容忍少量数据丢失、追求快速恢复的场景;AOF 适用于对数据安全性要求极高的场景。生产环境常两者结合使用。
七、 主从复制
用于构建高可用、读写分离的架构。
-
工作流程:
a. 从节点(Slave)向主节点(Master)发送
SYNC命令。b. 主节点执行
BGSAVE生成RDB快照文件发送给从节点。c. 主节点将生成RDB期间的写命令缓存并发送给从节点,从节点执行这些命令以保持同步。
-
配置:
-
主节点:无需特殊配置。
-
从节点:在配置文件中添加
slaveof masterIP masterPort,或在客户端执行该命令。
-
-
特点:
-
读写分离:主节点负责写,从节点负责读,分担主节点压力。
-
数据冗余:从节点是主节点的数据备份。
-
故障处理 :主节点宕机后,从节点不会自动升级为主节点,只能提供读服务。需要引入哨兵(Sentinel)或集群模式来实现高可用和自动故障转移。
-