目录
[1.1 Redis 简介](#1.1 Redis 简介)
[1.2 Redis 核心特性](#1.2 Redis 核心特性)
[1.3 Redis 应用场景](#1.3 Redis 应用场景)
[2.1 Windows系统安装](#2.1 Windows系统安装)
[2.1.1 安装方式](#2.1.1 安装方式)
[2.1.2 配置与启动](#2.1.2 配置与启动)
[2.2 Linux系统安装](#2.2 Linux系统安装)
[2.2.1 Ubuntu/CentOS 安装](#2.2.1 Ubuntu/CentOS 安装)
[2.2.2 安装后配置](#2.2.2 安装后配置)
[3.1 键操作命令](#3.1 键操作命令)
[3.2 数据库操作命令](#3.2 数据库操作命令)
[3.3 服务器管理命令](#3.3 服务器管理命令)
[4.1 连接与认证](#4.1 连接与认证)
[4.2 事务相关命令](#4.2 事务相关命令)
[5.1 String类型](#5.1 String类型)
[5.1.1 基本特性](#5.1.1 基本特性)
[5.1.2 常用命令](#5.1.2 常用命令)
[5.1.3 应用场景](#5.1.3 应用场景)
[5.2 List集合类型](#5.2 List集合类型)
[5.2.1 基本特性](#5.2.1 基本特性)
[5.2.2 常用命令](#5.2.2 常用命令)
[5.2.3 应用场景](#5.2.3 应用场景)
[5.3 Set集合类型](#5.3 Set集合类型)
[5.3.1 基本特性](#5.3.1 基本特性)
[5.3.2 常用命令](#5.3.2 常用命令)
[5.3.3 应用场景](#5.3.3 应用场景)
[5.4 Hash集合类型](#5.4 Hash集合类型)
[5.4.1 基本特性](#5.4.1 基本特性)
[5.4.2 常用命令](#5.4.2 常用命令)
[5.4.3 应用场景](#5.4.3 应用场景)
[5.5 Zset有序集合类型](#5.5 Zset有序集合类型)
[5.5.1 基本特性](#5.5.1 基本特性)
[5.5.2 常用命令](#5.5.2 常用命令)
[5.5.3 应用场景](#5.5.3 应用场景)
[6.1 Redis 优势总结](#6.1 Redis 优势总结)
[6.2 使用建议](#6.2 使用建议)
[6.3 学习路径建议](#6.3 学习路径建议)
一、什么是Redis
1.1 Redis 简介
Redis 全称为 Remote Dictionary Server,是一个开源的内存数据结构存储系统。它以键值对的形式存储数据,支持丰富的数据结构,如字符串(String)、列表(List)、集合(Set)、哈希(Hash)、有序集合(Sorted Set)等。Redis 以其极致的性能表现和丰富的功能,广泛应用于缓存、消息队列、实时分析等场景。
作为一个钥匙-值(Key-Value)数据库,Redis 不仅仅是简单的缓存系统,更具备内存数据库的特点,支持数据持久化,使数据既能快速读写,又能不因服务重启丢失。
Redis 是开源软件,拥有活跃的社区和丰富的生态系统,支持多种语言客户端,易于集成。
1.2 Redis 核心特性
- 内存存储,极致性能: Redis 所有数据均存储于内存,读写速度极快,通常延迟在微秒级别,适合对性能要求极高的应用。
- 丰富的数据结构支持: 除基础的字符串外,支持 Lists、Sets、Hashes、Sorted Sets 等复杂结构,满足多样化业务需求。
- 持久化机制: 支持 RDB 快照和 AOF 日志两种持久化方式,保证数据在断电或重启后的安全存储。
- 主从复制与高可用: 内置主从复制,支持哨兵(Sentinel)实现高可靠性和故障自动切换。
- 事务支持: 通过 MULTI/EXEC 命令,实现多命令事务提交,保证操作的原子性。
- 发布/订阅模式: 支持基于频道的消息发布与订阅模型,适用实时通讯应用。
- Lua 脚本支持: 无缝执行原子脚本,减少客户端与服务器交互。
1.3 Redis 应用场景
- 缓存系统: 使用 Redis 作为缓存,降低数据库负载,提升系统响应速度。
- 会话存储: 存储用户会话状态,实现分布式会话共享。
- 消息队列: 利用 List 及其他数据结构实现轻量级消息队列机制。
- 实时排行榜: 有序集合类型极适合构建游戏或电商实时排名系统。
- 计数器系统: 通过字符串类型的自增命令,实现高性能计数。
二、安装Redis
2.1 Windows系统安装
2.1.1 安装方式
- Windows 版本官方下载: 官方并未提供 Windows 版 Redis,但微软维护的 Windows 兼容版本可以从 GitHub 获取,适合开发测试使用。
- WSL 2 环境安装: 利用 Windows Subsystem for Linux 运行 Ubuntu 等 Linux 子系统,并在其中通过 Linux 安装方式部署 Redis,兼容性好。
- Docker 容器部署: 借助 Docker 容器镜像运行 Redis,快速搭建环境,且方便管理和迁移。
2.1.2 配置与启动
- 服务安装与启动: 可将 Redis 注册为 Windows 服务,方便后台运行和管理。
- 客户端连接测试: 通过 redis-cli 或其他图形化工具测试连接和基础操作。
- 基本配置调整: 修改 redis.windows.conf 文件,调整端口、守护进程、持久化参数等。
2.2 Linux系统安装
2.2.1 Ubuntu/CentOS 安装
- APT/YUM 包管理器安装: 使用 apt-get install redis-server(Ubuntu)或 yum install redis(CentOS)快速安装稳定版本。
- 源码编译安装: 下载最新源码包,通过 make 编译安装,适合需要自定义配置和最新特性用户。
- 版本选择建议: 生产环境建议选择稳定版本,确保稳定和安全;开发环境可尝试最新版本。
2.2.2 安装后配置
- 服务管理命令: systemctl start redis、systemctl enable redis 实现开机自启和服务管理。
- 配置文件详解: redis.conf 文件中包括网络绑定、最大客户端数、持久化配置、日志级别等重要参数。
- 安全设置建议: 配置访问密码,绑定本地地址,关闭不必要的命令,结合防火墙规则限制访问。
三、Redis通用命令
3.1 键操作命令
- KEYS pattern: 按照指定模式查询所有匹配的键。例如 KEYS user* 查找所有以 user 开头的键。生产环境慎用,因会阻塞服务器
- 在pattern中,可以不需要准确指定要查询的键,在键中间添加?表示?这个位置的字符可以随意,在要查询的键中间添加*,*表示可以匹配任意不限数量的字符,在要查询的键中添加[ad],表示这个位置只匹配a或者d,在要查询的键中添加[^a]表示匹配除了a以外的字符,在要查询的键中添加[a-d],表示匹配a到d之间的字符
- **keys * 这个命令"不错",**生产环境慎用
- EXISTS key: 检查某个键是否存在,返回 1 表示存在,0 表示不存在
- DEL key: 删除一个或多个键,释放内存空间
- EXPIRE key seconds: 为指定键设置过期时间,单位为秒,过期后键自动删除
- TTL key: 查看指定键剩余的生存时间,返回剩余秒数或特殊值(-1 未设置过期时间,-2 键不存在)
3.2 数据库操作命令
- SELECT index: 切换当前工作数据库 Redis 支持多达16个(默认0)数据库
cpp
select 1//切换到编号1这个数据库
- FLUSHDB: 清空当前数据库所有键,操作不可逆
cpp
flushdb
- FLUSHALL: 清空所有数据库所有键,慎用危险操作
cpp
flushall
3.3 服务器管理命令
- INFO: 返回 Redis 服务器运行状态、配置、客户端连接等详细信息。
- MONITOR: 实时监控 Redis 服务器接收到的所有命令,调试和性能分析利器。
- SAVE / BGSAVE: 手动触发持久化操作,前者阻塞阻塞客户端,后者后台异步保存快照
- 异步保存流程如下:
- 由于手不灵巧,这里就不画图,直接赘述:首先收到客户端发送的bgsave命令,然后判断有没有正在执行的bgsave,有就返回;没有就使用fork创建子进程,子进程创建失败也返回,父进程继续处理数据,监控子进程;子进程就去进行持久化操作(多进程的特性),子进程处理数据写入生成的临时rdb文件,完成后进行原子性操作重命名,替换,将新的rdb文件替换旧的rdb文件,最后子进程退出,这一流程就完成了
四、Redis基本命令
4.1 连接与认证
- AUTH password: 当 Redis 配置了访问密码时,客户端必须先认证才能执行后续操作。
- PING: 测试与服务器的连接是否正常,一般返回 PONG 表示存活。
- QUIT: 关闭客户端与 Redis 服务器之间的连接,ctrl+c也可以
4.2 事务相关命令
redis的事务就相对于只是打包的功能,然后配合redis的单线程,达到相对于的效果
- MULTI: 开启事务,之后所有命令将排队等待执行。
cpp
multi
- EXEC: 执行事务队列中的所有命令,具有原子性。
cpp
exec
- DISCARD: 取消当前事务,清空命令队列。
cpp
discard
- redis的事务的"原子性"不是真正的原子性,没有MySQL事务的那么规范,如果像MySQL那么规范的话就没有redis独有的一些功能特点
- Watch:对指定的key进行监视,相对于加了一把乐观锁,这一命令必须要在事务开启前,
- 然后在exec执行时判断,外界有没有对其进行更改,有更改就取消事务的执行
cpp
watch key
五、五种数据结构类型
5.1 String类型
5.1.1 基本特性
String 是 Redis 中最基本的数据类型,支持二进制安全,最大容量为 512MB,既可以存储字符串,也支持数值类型操作。
5.1.2 常用命令
- SET key value: 设置字符串值。
- GET key: 获取字符串值。
- INCR key / DECR key: 对键对应的数值执行自增自减,键不存在时初始化为0。
- APPEND key value: 给字符串追加数据。
- STRLEN key: 获取字符串长度。
5.1.3 应用场景
适用于缓存简单数据、实现计数功能、存储用户会话等。
5.2 List集合类型
5.2.1 基本特性
List 数据结构内部基于双向链表,支持重复元素,保持插入顺序。
5.2.2 常用命令
- LPUSH/RPUSH: 从左或右插入元素,返回插入成功元素个数
- LPOP/RPOP: 从左或右弹出元素。
- LRANGE: 获取指定范围内的元素列表。
- LLEN: 获取列表长度。
- push时key不存在会创建一个空的
5.2.3 应用场景
用于消息队列、最新消息缓存、历史数据记录。
5.3 Set集合类型
5.3.1 基本特性
Set 是无序且元素唯一的集合,支持多种集合操作。
5.3.2 常用命令
- SADD: 添加元素。
- SMEMBERS: 返回所有元素。
- SINTER: 多个集合交集。
- sinterstore:将多个集合交集放到另一个集合中
- sunionstore:将多个集合并集放到另一个集合中
- SUNION: 多个集合并集。
5.3.3 应用场景
标签分类、好友关系管理、唯一数据统计。
5.4 Hash集合类型
5.4.1 基本特性
类似于键值对的集合,适合存储对象的属性,支持部分字段操作。
5.4.2 常用命令
- HSET/HGET: 设置或获取字段值。
- HGETALL: 获取所有字段及对应的值。
- HINCRBY: 增加字段数值。
- HLEN: 获取字段数量。
5.4.3 应用场景
用户信息存储、商品属性配置、系统配置信息。
5.5 Zset有序集合类型
5.5.1 基本特性
基于跳表实现的带权重集合,唯一元素,分数用于排序,但分数可重复。
5.5.2 常用命令
-
ZADD: 添加成员及分数。
-
ZRANGE: 按分数升序查询指定排名区间成员。
-
ZREVRANGE: 按分数降序查询。
-
ZSCORE: 获取成员的分数。
-
zrangebyscore: 按分数范围查询
-
zpopmax:删除集合中score最大的元素
-
zpopmin:删除集合中score最小的元素
-
-
还有一些常用命令大体上几个数据结构用法都差不多,就不一一列举了
5.5.3 应用场景
游戏排行榜、延迟任务队列、区间范围筛选。
六、总结
6.1 Redis 优势总结
- 性能极致的内存数据库: 基于内存存储,读写速度远超传统数据库。
- 丰富的数据结构支持: 满足复杂多变的业务需求。
- 持久化与高可用保障: 数据安全有保障,系统稳定可靠。
- 活跃的社区生态: 丰富的客户端库和工具支持。
6.2 使用建议
- 根据业务场景选择合适数据结构: 避免滥用,提升性能和逻辑清晰。
- 合理设置过期时间: 避免内存泄漏。
- 注意内存使用监控: 预防 OOM 等问题。
- 生产环境配置持久化: 开启 AOF 或 RDB,防止数据丢失。
6.3 学习路径建议
- 掌握基础命令和数据类型。
- 理解各种数据结构应用场景。
- 通过项目实践加深理解。
- 深入学习高级功能和性能调优。
- 可以结合redis++对常用命令进行练习,不会就查文档,有助于对redis的进一步学习
附录:官方文档链接与社区资源推荐