目录
[a. 下载 Redis for Windows](#a. 下载 Redis for Windows)
[b. 启动 Redis 服务](#b. 启动 Redis 服务)
[c. 连接Redis](#c. 连接Redis)
[1. String(字符串)](#1. String(字符串))
[2. List(列表)](#2. List(列表))
[3. Set(集合)操作](#3. Set(集合)操作)
[4. Hash(散列)操作](#4. Hash(散列)操作)
[5. ZSet(有序集合)操作](#5. ZSet(有序集合)操作)
实验前提
1.目的
- 掌握在 Windows环境下安装、配置并启动 Redis 服务;
- 熟悉 redis-cli 的连接方式 与常用管理命令;
- 掌握Redis五种核心数据类型(String、List、Set、Hash、ZSet)的redis-cli操作命令;
- 理解各数据类型的应用场景,能结合实际业务选择合适的数据类型;
- 培养命令行工具的使用习惯与独立排查问题的能力。
2.要求
- 独立完成 Redis 的安装与启动,记录安装步骤截图;
- 按照指导书完成全部 redis-cli 命令练习,理解每条命令的语义。
3.实验环境
- Win11操作系统
- MongoDB 8.2
- MongoDB Compass 1.49.5
- Mongosh 2.8.3
- Python 3.11.4
- PyMongo 4.17.0
- Redis 3.0.504 Redis-cli
实验流程图

Redis的安装与启动
Windows 安装方式(推荐)
a. 下载 Redis for Windows
访问 https://github.com/tporadowski/redis/releases,下载最新.msi 安装包(如 Redis-x64-5.0.14.1.msi)。

双击安装,勾选"Add the Redis installation folder to the PATH",按提示完成安装。
b. 启动 Redis 服务
方法1:安装时勾选了"Add to Windows Service",Redis 将自动作为系统服务运行。
方法2:在命令行中执行以下命令手动启动:
redis-server
看到 Redis 版本信息和端口 6379 监听成功即表示启动正常。

c. 连接Redis
打开新的命令行窗口,执行以下命令连接本地 Redis:
redis-cli -h 127.0.0.1 -p 6379
成功连接后,命令行提示符变为 127.0.0.1:6379>

注意事项:
-
- Redis 默认端口为 6379,请确认防火墙未阻断该端口。
-
- 生产环境应设置密码(requirepass),实验环境可暂不设置。
-
- Windows 下关闭 redis-server 窗口将终止服务,请勿在实验过程中关闭。
Redis中的数据结构及操作
1. String(字符串)
数据结构
- Redis 字符串是最基础的数据结构:所有键都是字符串,其他数据结构(如 List、Set、Hash、ZSet)的元素或字段值也均为字符串;
- 支持普通文本(含 JSON/XML)、整数/浮点数(可原子自增)以及二进制数据(如图片、音视频),最大容量 512 MB;
- 典型应用:缓存、计数器、共享 Session、限速器等。
操作
| 命令 | 含义 | 使用方法示例 |
|---|---|---|
SET |
存储一个字符串键值对 | SET book:1:name "Redis实战" |
GET |
获取指定键的值 | GET book:1:name |
MSET |
批量设置多个键值对 | MSET book:2:name "本草纲目" book:2:author "李时珍" |
MGET |
批量获取多个键的值 | MGET book:2:name book:2:author |
SETNX |
仅当键不存在时设置 (Set if Not eXists) | SETNX book:1:price "100"(返回0表示已存在) |
SETEX |
设置值并指定过期时间(秒) | SETEX session:token 30 "abc123" |
INCR |
将键的整数值加1 | INCR visit:count |
DECR |
将键的整数值减1 | DECR visit:count |
INCRBY |
将键的整数值增加指定步长 | INCRBY visit:count 10 |
APPEND |
向字符串末尾追加内容 | APPEND book:1:name "-全六册" |
STRLEN |
获取字符串的长度 | STRLEN book:2:name |
2. List(列表)
数据结构
- 用来储存多个有序的字符串,一个列表最多能存储2^32-1个元素。
- 在Redis中,可充当栈和队列的操作可以队列表两段插入与弹出,也可以获取指定范围内的元素列表等。
- 适用场景:Redis中的Ipush+broop命令组合可以实现阻塞队列:生产者客户端用Ipush从列表左侧插入元素,多个消费者客户端使用broop阻塞式的抢占列表尾部的元素。
操作
| 命令 | 含义 | 使用方法示例 |
|---|---|---|
LPUSH |
从列表左端插入一个或多个元素 | LPUSH user:1:history "page_home" "page_product" |
RPUSH |
从列表右端插入一个或多个元素 | RPUSH task:queue "task1" "task2" "task3" |
LRANGE |
获取列表指定范围的元素 (0 -1 表示全部) | LRANGE user:1:history 0 2 |
LLEN |
获取列表长度 | LLEN task:queue |
LINDEX |
通过索引获取列表元素 | LINDEX task:queue 0 |
LSET |
通过索引设置列表元素的值 | LSET task:queue 0 "task1_updated" |
LPOP |
弹出并返回列表左端的元素 | LPOP task:queue |
RPOP |
弹出并返回列表右端的元素 | RPOP task:queue |
LREM |
删除列表中指定数量、指定值的元素 | LREM test:list 2 "a"(从左删除2个"a") |
3. Set(集合)操作
数据结构
- 可以储存多个有序的字符串,但是每个元素不能重复;
- 集合中的元素无序,故不能通过索引下标获取元素;
- 支持多集合的运算,取交集、并集、差集等...
- 适用场景:获取不同类别用户的共同爱好,增强用户粘度。
操作
| 命令 | 含义 | 使用方法示例 |
|---|---|---|
SADD |
向集合中添加一个或多个元素 | SADD article:1:tags "Python" "Redis" "数据库" |
SMEMBERS |
返回集合中的所有元素 | SMEMBERS article:1:tags |
SISMEMBER |
判断元素是否存在于集合中 | SISMEMBER article:1:tags "Redis" |
SCARD |
返回集合的元素个数(基数) | SCARD article:1:tags |
SREM |
删除集合中的一个或多个元素 | SREM article:1:tags "数据库" |
SPOP |
随机弹出一个元素 | SPOP article:2:tags |
SINTER |
返回多个集合的交集 | SINTER article:1:tags article:2:tags |
SUNION |
返回多个集合的并集 | SUNION article:1:tags article:2:tags |
SDIFF |
返回第一个集合相对于其他集合的差集 | SDIFF article:1:tags article:2:tags |
4. Hash(散列)操作
数据结构
- 键值对结构
- 哈希结构对于字符串序列化缓存信息更为直观,且更新操作更加便捷
- 适用场景:用户信息管理。
操作
| 命令 | 含义 | 使用方法示例 |
|---|---|---|
HSET |
设置哈希表中的字段值 | HSET user:1001 name "张三" age "21" |
HGET |
获取哈希表中指定字段的值 | HGET user:1001 name |
HGETALL |
获取哈希表中所有字段和值 | HGETALL user:1001 |
HMSET |
批量设置多个字段值 (已弃用,可用HSET代替) | HMSET product:001 name "键盘" price "399" |
HMGET |
批量获取多个字段的值 | HMGET product:001 name price |
HINCRBY |
将哈希表中指定字段的整数值增加指定步长 | HINCRBY product:001 stock -1 |
HDEL |
删除哈希表中的一个或多个字段 | HDEL product:001 stock |
HEXISTS |
判断哈希表中是否存在指定字段 | HEXISTS product:001 name |
HKEYS |
获取哈希表中的所有字段名 | HKEYS product:001 |
HVALS |
获取哈希表中的所有值 | HVALS product:001 |
5. ZSet(有序集合)操作
数据结构
- 每个元素关联一个分数(score):成员(member)唯一,但分数可以重复;Redis 根据分数对元素进行自动排序;
- 支持集合运算,可对多个ZSet取交集、并集等;
- 适用场景:排行榜、延迟队列(score=时间戳)、带权重的任务队列、热搜榜等。
操作
| 命令 | 含义 | 使用方法示例 |
|---|---|---|
ZADD |
向有序集合添加元素(带分数) | ZADD game:rank 1500 "玩家A" 3200 "玩家B" |
ZRANGE |
按分数升序返回指定范围的元素 | ZRANGE game:rank 0 -1 WITHSCORES |
ZREVRANGE |
按分数降序返回指定范围的元素 | ZREVRANGE game:rank 0 -1 WITHSCORES |
ZSCORE |
返回元素的分数 | ZSCORE game:rank "玩家A" |
ZRANK |
返回元素在有序集合中的升序排名(从0开始) | ZRANK game:rank "玩家A" |
ZREVRANK |
返回元素在有序集合中的降序排名 | ZREVRANK game:rank "玩家A" |
ZINCRBY |
增加元素的分数 | ZINCRBY game:rank 500 "玩家A" |
ZRANGEBYSCORE |
按分数范围查询元素 | ZRANGEBYSCORE game:rank 2000 5000 WITHSCORES |
ZREM |
删除有序集合中的元素 | ZREM game:rank "玩家D" |
ZCARD |
返回有序集合的元素个数 | ZCARD game:rank |
ZCOUNT |
返回分数在指定范围内的元素个数 | ZCOUNT game:rank 2000 5000 |
Redis中常用键管理命令
| 命令 | 含义 | 使用方法示例 |
|---|---|---|
KEYS |
模糊查询键(生产环境慎用) | KEYS book:* |
TYPE |
返回键的类型 | TYPE book:1:name |
EXISTS |
判断键是否存在 | EXISTS book:1:name |
RENAME |
重命名键 | RENAME oldkey newkey |
DEL |
删除一个或多个键 | DEL book:1:price |
EXPIRE |
设置键的过期时间(秒) | EXPIRE session:token 30 |
TTL |
查看键的剩余生存时间(秒) | TTL session:token |
PERSIST |
移除键的过期时间 | PERSIST session:token |