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)或集群模式来实现高可用和自动故障转移。

相关推荐
maqr_11022 分钟前
MySQL数据库迁移到云端如何保障安全_数据加密与SSL连接配置
jvm·数据库·python
u01091476027 分钟前
MySQL如何限制触发器递归调用的深度_防止触发器死循环方法
jvm·数据库·python
weixin_3812881832 分钟前
MySQL中如何使用HEX函数转换十六进制_MySQL进制转换函数
jvm·数据库·python
Deitymoon41 分钟前
嵌入式数据库——SQLite基础
数据库·sqlite
YMatrix 官方技术社区41 分钟前
美国·硅谷|YMatrix 即将亮相 Postgres Conference 2026,前瞻 AI 时代的数据基座
数据库·数据仓库·postgresql·时序数据库·ymatrix
bKYP953cL43 分钟前
构建自己的AI编程助手:基于RAG的上下文感知实现方案
数据库·人工智能·ai编程
Bert.Cai44 分钟前
MySQL DML简介
数据库·mysql
maqr_1101 小时前
HTML怎么生成订单预览_HTML只读订单信息结构【操作】
jvm·数据库·python
2301_803875611 小时前
如何通过phpMyAdmin给WordPress所有用户发送全站通知_系统表插入
jvm·数据库·python
2301_777599372 小时前
mysql如何进行数据库容量规划_评估磁盘空间增长趋势
jvm·数据库·python