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

相关推荐
IpdataCloud13 分钟前
跨区服玩家延迟高怎么办?用IP离线库自动分配到最近服务器
数据库·tcp/ip·github·php·ip
wuqingshun3141591 小时前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
空中湖2 小时前
电池简史(五):极限之梦与终章——锂硫、锂空气、量子电池,以及你该知道的电池投资与生活指南
数据库·程序人生
蓝胖子酱3 小时前
在 Electron 中用 electron-store 实现加密存储与自定义格式文件
前端·javascript·数据库
snow@li4 小时前
Redis:数据库语法速查表 / 全景梳理
数据库·redis·缓存
Devlive 开源社区4 小时前
Nebula 1.6.0 发布:跨区域桶自动路由、秒传、文本/PDF 预览一次到位
数据库·sql
这个DBA有点耶4 小时前
导个数据中文全变问号?字符集这事儿真没那么简单
数据库·mysql·代码规范
Alluxio4 小时前
Alluxio + Anyscale Ray框架,实现跨区域训练数据读取速度20倍提升
人工智能·分布式·机器学习·缓存·ai
wuqingshun3141594 小时前
MYSQL中如果发生死锁应该如何解决?
数据库·mysql
DO_Community5 小时前
Weaviate 托管数据库现已在 DigitalOcean 上开放公测
数据库·人工智能·开源·向量数据库·weaviate