【Redis 数据库介绍】

文章目录

  • [一、Redis 是什么?](#一、Redis 是什么?)
    • [1. 基本定义](#1. 基本定义)
    • [2. 内存与持久化](#2. 内存与持久化)
    • [3. 支持的数据结构 & 存储模型](#3. 支持的数据结构 & 存储模型)
  • [二、Redis 的数据类型详解](#二、Redis 的数据类型详解)
  • [三、Redis 常见使用场景](#三、Redis 常见使用场景)
  • [四、Java(或 Spring Boot)操作 Redis](#四、Java(或 Spring Boot)操作 Redis)
  • [五、Redis vs 传统关系型数据库 / NoSQL 对比](#五、Redis vs 传统关系型数据库 / NoSQL 对比)

一、Redis 是什么?

1. 基本定义

  • Redis 是一个开源的内存型键-值(key-value)数据库/数据结构存储系统。
  • 全称为 Remote Dictionary Server(远程字典服务)。
  • 它由 C 语言编写、遵守 BSD 许可,支持网络访问。
  • 与传统关系型数据库不同,Redis 是 NoSQL 数据库 --- 不使用表/行/列模型,也不支持 SQL 查询,而是通过键(key)直接访问对应的值(value)。

2. 内存与持久化

  • Redis 的 "驻数据" 默认存储在内存中。由于内存访问远快于磁盘读写,这赋予了 Redis 非常高的读写性能和低延迟。
  • 同时 Redis 支持将数据持久化到磁盘 --- 即使服务重启,也能将数据恢复/重载。
  • 这种"内存 + 可选持久化"的机制,使 Redis 在兼顾速度和数据安全性之间取得了平衡。

3. 支持的数据结构 & 存储模型

Redis 不只是简单的 key → string,它支持丰富的数据结构:包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set / Zset)等。这些数据结构使得 Redis 在处理复杂数据时,也能保持高性能与灵活性。

每一个存储对象都对应一个 "key" 和 "value" 的键值对。key 通常是字符串(也可以是任意二进制序列),Redis 使用高效的哈希来定位对应 value。


二、Redis 的数据类型详解

下面是 Redis 中常用的数据类型,以及它们适合的应用场景 ------

数据类型 描述 / 适用场景
String 最基础的数据类型,适合存储文本、数字、序列化后的 JSON/对象/Token 等。
Hash(Hash-map / dictionary) 用于存储对象/结构化数据,比如用户信息、配置项,能高效按字段访问子属性。
List(列表) 有序的元素集合,适合消息队列(queue)、任务队列、日志队列、简单流水线等。
Set(集合) 无序且元素唯一,适合存储标签集合、不重复元素集合、交并集计算等。
Sorted Set(有序集合 / Zset) 每个元素关联一个"分数(score)",根据分数排序。适合排行榜、按时间排序、优先队列等场景。

底层实现上,Redis 使用不同的数据结构(如哈希表、跳跃表、压缩表、快速链表等)来支持这些类型以兼顾性能与内存使用效率。

Redis 还提供对键空间(keyspace)的管理能力:key 可以设置"过期时间"(TTL, time-to-live),过期后自动删除 --- 这对缓存、会话管理、限时数据非常有用。


三、Redis 常见使用场景

  • 缓存(Cache):将频繁访问的数据缓存在 Redis 中,以减少对主数据库(如 MySQL、PostgreSQL 等)的压力,加速响应速度。
  • 会话/Session 存储:Web 应用中用户登录状态、Session 信息、临时数据等,可存储在 Redis,提升访问速度并简化横向扩展。
  • 消息队列 / 任务队列 / 发布-订阅(Pub/Sub):利用 Redis 的 List、Pub/Sub、Stream(在新版本中)等机制,实现异步任务、事件通知、实时消息推送等功能。
  • 排行榜 / 排序 / 计数 / 统计:Sorted Set(有序集合)非常适合做排行榜、分数排序、频率统计(如点赞数、访问量排行榜等)。
  • 实时分析 / 实时状态存储:当需要处理大量快速读写、实时更新状态、实时统计时,Redis 的内存速度优势十分明显。
  • 微服务 / 分布式系统中共享缓存或共享状态:在分布式系统中,各服务之间可以共享 Redis,用于共享配置、状态、限流、分布式锁等。

四、Java(或 Spring Boot)操作 Redis

java 复制代码
// 示例基于 Jedis
import redis.clients.jedis.Jedis;

public class RedisDemo {
    public static void main(String[] args) {
        // 连接本地 Redis 服务(默认端口 6379)
        try (Jedis jedis = new Jedis("localhost", 6379)) {
            String key = "user:1001:profile";
            // 存储字符串
            jedis.set(key, "{\"name\":\"Alice\",\"age\":30}");
            // 设置过期时间(秒)
            jedis.expire(key, 3600);

            // 获取
            String profile = jedis.get(key);
            System.out.println("Profile: " + profile);

            // 使用 Hash 存储结构化信息
            String userHash = "user:1002";
            jedis.hset(userHash, "name", "Bob");
            jedis.hset(userHash, "age", "25");
            System.out.println("Name: " + jedis.hget(userHash, "name"));
            System.out.println("Age: " + jedis.hget(userHash, "age"));

            // 列表 --- 简单队列
            String listKey = "job_queue";
            jedis.lpush(listKey, "task1");
            jedis.lpush(listKey, "task2");
            String task = jedis.rpop(listKey);
            System.out.println("Pop task: " + task);
        }
    }
}

这个例子展示了使用字符串、Hash、List 三种数据结构,也体现了 Redis 的核心思想 ------ 用 key-value(或结构化 value) + 内存 + 过期机制 + 多种数据类型,快速、高效地存储和获取数据。


五、Redis vs 传统关系型数据库 / NoSQL 对比

项目 Redis 传统关系型数据库(如 MySQL)/文档型数据库(如 MongoDB)
存储方式 内存优先 + 可持久化 通常以磁盘为主
数据模型 键值 / 数据结构(String、Hash、List、Set、Zset ...) 表格 / 文档 / 行列 / JSON / BSON
访问速度 / 延迟 极快,适合高并发 / 低延迟场景 相对较慢,适合复杂查询和事务管理
查询能力 仅通过 key/命令访问,缺乏复杂查询(如 SQL、join、复杂过滤) 支持 SQL、MQL、复杂查询、多表/集合关联/聚合等
使用场景 缓存、会话存储、实时计数、排行榜、队列、临时数据 结构化存储、关系数据、复杂查询、交易型操作、持久化存储

因此,Redis 更适合"对速度要求高、结构不复杂、以 key-value 为主 "的场景;对于"数据结构复杂、关系多、需要复杂查询和事务"的场景,传统数据库/文档数据库更合适。许多系统会将 Redis 与传统数据库配合使用:Redis 做缓存/临时存储/高频访问数据,主数据库负责持久化和复杂查询。

相关推荐
Elastic 中国社区官方博客1 小时前
Elasticsearch:数据脱节如何破坏现代调查
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Dxy12393102161 小时前
MySQL性能优化深度解析
数据库·mysql·性能优化
铁锚1 小时前
Redis中KEYS命令的潜在风险与遍历建议
数据库·redis·缓存
清晓粼溪2 小时前
MySQL-01:基础知识
数据库·mysql
贝塔实验室2 小时前
Altium Designer 集成库介绍
arm开发·数据库·驱动开发·硬件工程·射频工程·基带工程·精益工程
哈哈老师啊2 小时前
Springboot学生接送服务平台8rzvo(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue图书商城系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
思成不止于此2 小时前
MySQL 基础核心知识点全梳理:从入门到实战
数据库·笔记·学习·mysql
爬山算法2 小时前
Redis(168) 如何使用Redis实现会话管理?
java·数据库·redis