Redis

一、 适用场景

  • 典型场景:数据量小、查询(尤其是读操作)极其频繁的应用。

  • 具体案例:首页广告、热点资讯、秒杀库存、会话缓存等。

  • 为什么用Redis:

    • MySQL瓶颈:数据存储在硬盘,面对高并发(如每秒数万次查询)时,I/O会成为性能瓶颈。

    • Redis优势:数据主要存储在内存中,读写速度极快(读:~110,000次/秒,写:~81,000次/秒),能轻松支撑高并发访问。

二、 Redis简介

Redis 是一个用 C 语言编写的、高性能的键值对(Key-Value)数据库。它将数据主要存储在内存中,因此具备极高的读写性能。它支持多种数据结构(字符串、哈希、列表、集合、有序集合等),并提供了持久化、主从复制、事务等功能。

三、 安装与启动(以3.0.0为例)

  1. 上传并解压 :tar -zxvf redis-3.0.0.tar.gz

  2. 安装依赖 :yum install gcc-c++

  3. 编译安装 :进入解压目录,执行 make然后 make install PREFIX=/usr/local/redis

  4. 配置 :拷贝配置文件 redis.conf到安装目录的 bin/下,并修改 daemonize yes以支持后台运行。

  5. 启动 :./redis-server redis.conf

  6. 连接测试 :./redis-cli

  7. 关闭 :./redis-cli shutdown

四、 基本命令

  • keys *:查看所有键。

  • exists key:判断键是否存在。

  • expire key seconds/ ttl key:设置/查看键的过期时间。

  • incr key/ decr key:对数值型键值进行原子性的自增/自减。

五、 多数据库

  • 一个Redis实例默认提供16个数据库(编号0-15),可通过 SELECT index切换。

  • FLUSHDB:清空当前数据库。

  • FLUSHALL:清空所有数据库。

六、 持久化(核心机制)

Redis 提供了两种主要的持久化方式,将内存数据保存到磁盘以防数据丢失。

  1. 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变化)

    • 优点:性能影响小,恢复大数据集速度快。

    • 缺点:可能丢失最后一次快照之后的数据(数据完整性有损)。

  2. AOF (Append Only File)

    • 机制 :记录每一次写操作命令,以日志形式追加到文件(默认 appendonly.aof)中。

    • 同步策略 (appendfsync):

      • always:每次写都同步,最安全,性能最低。

      • everysec:每秒同步一次(默认),平衡了性能和安全。

      • no:由操作系统决定,性能好,安全性低。

    • 优点 :数据完整性高,最多丢失一秒数据(everysec策略下)。

    • 缺点:AOF文件体积通常比RDB大,恢复速度较慢,对性能有一定影响。

小结:RDB 适用于可容忍少量数据丢失、追求快速恢复的场景;AOF 适用于对数据安全性要求极高的场景。生产环境常两者结合使用。

七、 主从复制

用于构建高可用、读写分离的架构。

  1. 工作流程:

    a. 从节点(Slave)向主节点(Master)发送 SYNC命令。

    b. 主节点执行 BGSAVE生成RDB快照文件发送给从节点。

    c. 主节点将生成RDB期间的写命令缓存并发送给从节点,从节点执行这些命令以保持同步。

  2. 配置:

    • 主节点:无需特殊配置。

    • 从节点:在配置文件中添加 slaveof masterIP masterPort,或在客户端执行该命令。

  3. 特点:

    • 读写分离:主节点负责写,从节点负责读,分担主节点压力。

    • 数据冗余:从节点是主节点的数据备份。

    • 故障处理 :主节点宕机后,从节点不会自动升级为主节点,只能提供读服务。需要引入哨兵(Sentinel)或集群模式来实现高可用和自动故障转移。

相关推荐
ShineWinsu3 分钟前
对于Redis:AOF持久化的解析
linux·数据库·redis·缓存·面试·持久化·aof
仍然.12 分钟前
Redis---集群
数据库·redis·缓存
Allstar_4315 分钟前
DV/PV 验证管理:为量产放行提供完整证据链——全星研发项目管理 APQP 软件系统汽车电子行业专业级研发项目管理平台
数据库·汽车
小范的技术工坊36 分钟前
向量数据库解决了什么问题?
数据库
小蒜学长39 分钟前
在线保险服务与管理平台的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·服务平台·在线保险
做运维的阿瑞1 小时前
SQL 面试高频:用户、商品、订单三表查询全解析
数据库·sql·mysql
hweiyu002 小时前
Redis命令:HSCAN
redis·缓存
CJi0NG2 小时前
【自用】MySQL - 语法:DDL、DML、DQL、DCL
数据库·mysql
姜鱼问生3 小时前
数据库备份 + 灾难恢复演练:从 dump 恢复全库
运维·数据库
清水白石0083 小时前
Python 对象模型深度解析:从“一切皆对象”到 id、type、isinstance 底层机制与小整数缓存原理
开发语言·python·缓存