Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • 服务器tutorial
  • spring

  • 数据库

    • Database 指引
    • mysql

    • sqlite
    • PostgreSQL
    • redis 使用指南
      • Redis 的优势
        • 为什么使用 Redis
      • Redis vs HashMap
        • 对比分析
        • Redis 的便携性体现
      • 使用场景
        • 适合使用 Redis 的场景
        • 适合使用 HashMap 的场景
      • Redis vs MySQL
        • 主要差异
        • 配合使用
      • 相关资源
        • 官方文档
        • 学习资源
    • mysql2pgsql
  • 运维

  • 运营

  • other

  • 《server》
  • 数据库
Jacky
2023-10-07
目录

redis 使用指南

Get the world's fastest in-memory database from the ones who built it.

# Redis 的优势

# 为什么使用 Redis

  1. 持久化能力

    • 支持 RDB(快照)和 AOF(追加日志)两种持久化方式
    • 即使服务器重启,数据也不会丢失
    • HashMap 存储在内存中,进程重启后数据丢失
  2. 分布式支持

    • 支持主从复制、哨兵模式、集群模式
    • 多个应用实例可以共享同一份数据
    • HashMap 只能在同一进程内共享
  3. 丰富的数据结构

    • 字符串、列表、集合、有序集合、哈希、位图、HyperLogLog、流等
    • 每种数据结构都有专门的优化操作
    • HashMap 只提供基本的键值对存储
  4. 高性能

    • 基于内存操作,读写速度极快
    • 单线程模型避免锁竞争
    • 支持管道(pipeline)批量操作
  5. 原子操作

    • 所有操作都是原子性的
    • 支持事务(MULTI/EXEC)
    • 支持 Lua 脚本执行复杂逻辑
  6. 过期策略

    • 支持键的过期时间设置(TTL)
    • 自动清理过期数据
    • HashMap 需要手动实现过期逻辑
  7. 发布订阅

    • 支持消息的发布/订阅模式
    • 可用于实现消息队列、事件通知等
    • HashMap 无法实现此类功能

# Redis vs HashMap

# 对比分析

特性 Redis HashMap (内存)
数据持久化 ✅ 支持 RDB/AOF ❌ 进程重启数据丢失
分布式访问 ✅ 多进程/多服务器共享 ❌ 仅单进程内可用
数据结构 ✅ 丰富(字符串、列表、集合等) ❌ 仅键值对
过期机制 ✅ 内置 TTL 支持 ❌ 需手动实现
原子操作 ✅ 所有操作原子性 ⚠️ 需额外加锁保证
发布订阅 ✅ 内置支持 ❌ 不支持
性能 ✅ 极高(微秒级) ✅ 极高(纳秒级)
内存管理 ✅ 自动管理,支持 LRU 淘汰 ⚠️ 需手动管理
网络访问 ✅ 支持远程访问 ❌ 仅本地访问
数据备份 ✅ 支持主从复制 ❌ 需手动实现

# Redis 的便携性体现

相比于直接使用 HashMap,Redis 的便携性主要体现在:

  1. 跨进程/跨服务器共享

    • 多个应用实例可以访问同一份数据
    • 无需实现复杂的数据同步机制
    • HashMap 需要序列化/反序列化或使用共享内存
  2. 开箱即用的功能

    • 过期时间、持久化、发布订阅等功能内置
    • 无需重复造轮子
    • HashMap 需要自己实现这些功能
  3. 标准化的接口

    • 统一的命令接口,学习成本低
    • 多种编程语言都有成熟的客户端库
    • HashMap 在不同语言中实现方式不同
  4. 运维友好

    • 丰富的监控指标和工具
    • 支持集群、主从等高可用方案
    • 成熟的运维实践和社区支持
  5. 数据一致性

    • 单线程模型保证操作原子性
    • 支持事务和 Lua 脚本
    • HashMap 在多线程环境下需要额外同步

# 使用场景

# 适合使用 Redis 的场景

  • 缓存: 缓存热点数据,减少数据库压力
  • 会话存储: 存储用户会话信息
  • 计数器: 实时统计、点赞数、访问量等
  • 排行榜: 使用有序集合实现排行榜
  • 消息队列: 使用列表实现简单的消息队列
  • 分布式锁: 实现分布式环境下的锁机制
  • 限流: 实现 API 限流、防刷等功能

# 适合使用 HashMap 的场景

  • 单进程内的临时数据: 不需要持久化和共享
  • 极简单的键值存储: 不需要复杂数据结构
  • 对延迟要求极高: 需要纳秒级响应(Redis 是微秒级)

# Redis vs MySQL

# 主要差异

  • 存储介质: Redis 内存存储,MySQL 磁盘存储
  • 数据结构: Redis 支持多种数据结构,MySQL 是关系型表结构
  • 性能: Redis 读写速度极快(微秒级),MySQL 相对较慢(毫秒级)
  • 数据容量: Redis 受内存限制,MySQL 可存储海量数据
  • 使用场景: Redis 用于缓存、会话、实时数据,MySQL 用于持久化存储

# 配合使用

在实际项目中,Redis 和 MySQL 通常配合使用:

  • Redis 作为缓存层: 缓存 MySQL 的查询结果
  • Redis 存储热点数据: 减少对 MySQL 的访问
  • MySQL 存储持久化数据: 作为数据源和最终存储

# 相关资源

# 官方文档

  • Redis 官网 (opens new window)
  • Redis 命令参考 (opens new window)
  • Redis 文档 (opens new window)

# 学习资源

  • 数据结构: 了解 Redis 支持的数据类型及其使用场景
  • 持久化: 理解 RDB 和 AOF 的机制和选择
  • 高可用: 学习主从复制、哨兵、集群等方案
  • 性能优化: 了解内存优化、命令优化等技巧
上次更新: 2025/11/13, 15:56:03
PostgreSQL
mysql2pgsql

← PostgreSQL mysql2pgsql→

最近更新
01
math经典公式
11-19
02
线性代数
11-18
03
电商运营核心指标图表
11-16
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式