第4章 Redis核心技术解析

实战篇:从安装到指尖上的五大数据类型

面向大数据工程技术专业 · 纯动手实验课 (90分钟)

提示:请大家打开电脑,跟着屏幕一步步敲击代码!

实验课闯关指南

1

让Redis跑起来

Windows & Linux 三大环境保姆级安装

2

初次见面请多关照

连接测试与基础键(Key)操作

3

五大兵器实操

亲手把数据存进五大数据类型

4

终极 Boss 挑战

独立完成电商数据结构设计大作业

4.2 Redis 的安装

工欲善其事,必先配环境

4.2.1 Windows 环境安装 (最简单)

Step 1: 下载解压

由于 Redis 官方其实只支持 Linux,Windows 版是微软开源技术团队维护的。


  • 大家从群文件下载压缩包:Redis-x64-3.0.504.zip
  • 解压到非中文目录下,例如:D:\Redis

⚠️ 警告:路径里千万不要有中文或者空格,否则等下会报错!

Step 2: 启动服务端

进入刚刚解压的文件夹,找到 redis-server.exe,双击它!


如果你看到一个由特殊符号拼成的 大方块图形 (Redis Logo),并且没有闪退,恭喜你,本地的内存跑车已经发动了!

※ 这个黑窗口不要关,关了 Redis 就停了。

4.2.2 CentOS 环境安装 (企业最常用)

大数据服务器一般都是 CentOS,这里需要源码编译安装。请打开你的 Xshell 连接虚拟机。

跟着老师一行一行敲:

# 1. 安装C语言编译器 (因为Redis是用C写的)
[root@localhost ~]# yum install -y gcc
# 2. 下载并解压源码包 (假设包在 /opt 目录下)
[root@localhost ~]# cd /opt
[root@localhost opt]# tar -zxvf redis-6.2.6.tar.gz
# 3. 进入目录进行编译和安装
[root@localhost opt]# cd redis-6.2.6
[root@localhost redis-6.2.6]# make
[root@localhost redis-6.2.6]# make install PREFIX=/usr/local/redis

※ 如果 make 报错,大概率是 gcc 没装好,举手呼叫老师!

4.2.3 Ubuntu 环境安装 (一键搞定)

相比于 CentOS 的复杂编译,Ubuntu 系统的包管理工具 `apt` 让安装变得极其简单。

一键安装命令:

sudo apt update
sudo apt install redis-server -y

检查是否安装成功

安装完成后,Redis 会作为后台服务自动运行。我们来查一下它的状态:

sudo systemctl status redis

如果看到绿色的 active (running),说明大功告成!按 `q` 键退出状态查看。

4.3 Redis 基本命令实操

拿起客户端这把“键盘剑”,开启对话

4.3.1 客户端连接与 Ping 测试

打开客户端工具

服务端已经在后台跑了,现在我们需要一个窗口去敲命令:

  • Windows同学: 在刚才的文件夹里,双击 redis-cli.exe
  • Linux同学: 在终端直接输入 redis-cli 回车

你应该能看到提示符变成了:127.0.0.1:6379>

测试网络连通性

敲下你的第一行命令:

127.0.0.1:6379> ping
PONG

如果有返回 PONG,说明你们已经“握手”成功了!

4.3.2 键(Key)的常规操作实练

理论课讲过,Redis 是键值对数据库,我们先造两个假数据进去练习查找和删除:

127.0.0.1:6379> set k1 "hello"
OK
127.0.0.1:6379> set k2 "world"
OK

1. 查所有键

命令:keys *

(能看到 k1 和 k2)

2. 查是否存在

命令:exists k1

(返回 1 说明存在)

3. 删掉某个键

命令:del k1

(再用 keys * 查,k1 就没了)

定时炸弹:过期时间设置 (重点)

这个功能我们在缓存(比如验证码)中经常用,跟着敲:

# 先存一个验证码
127.0.0.1:6379> set code "8888"
# 设定 20 秒后过期
127.0.0.1:6379> expire code 20
# 赶紧查一下还剩几秒?
127.0.0.1:6379> ttl code

观察实验结果

疯狂按上箭头键 `↑` 重复执行 ttl code


  • 你会发现数字一直在变小:18, 15, 9...
  • 等返回 -2 的时候,说明数据已经被销毁了。
  • 此时再执行 get code,会得到空值 (nil)。

4.4 五大数据类型实练

纸上得来终觉浅,绝知此事要躬行

4.4.1 String 字符串实战 (造一个点赞器)

情景:B站视频点赞

我们用 String 存一期视频的播放量和点赞数。每次有人看,数字就加 1。


敲击以下代码:

# 初始点赞数为0
SET likes:vid01 0
# 张三点赞了!(自增1)
INCR likes:vid01
# 李四也点赞了!(自增1)
INCR likes:vid01
# 查询最终点赞数
GET likes:vid01

你最终得到的值是?

没错,应该是 "2"。

※ `likes:vid01` 这种带冒号的写法,是企业里给 Key 命名的规范(分类:具体ID),就像文件夹路径一样清晰。

4.4.2 Hash 哈希实战 (建立学生档案)

我们要存一个学生的信息:姓名(name)=王五,年龄(age)=21,专业(major)=大数据。


这特别像存一个对象,用 Hash 最合适:

# 往学生01的档案柜里塞字段
HSET student:01 name "WangWu"
HSET student:01 age 21
HSET student:01 major "BigData"

档案查阅

老师现在只想知道这个学生的名字,或者想看全套档案,该怎么查?

# 单独查名字
HGET student:01 name

# 一次性查看所有内容 (字段名和值会交替显示)
HGETALL student:01

4.4.3 List 列表实战 (排队买饭)

情景:食堂打饭队伍

A, B, C 三个人依次从队伍的后面(右边 Right)排队入场。

# 从右侧推入数据 (也可以一次推多个)
RPUSH queue "A"
RPUSH queue "B" "C"
# 偷看一下队伍长什么样(0 到 -1 表示全看)
LRANGE queue 0 -1

输出顺序应该是:1) "A" 2) "B" 3) "C"

打饭完成离开

阿姨打饭是从队伍的最前面(左边 Left)开始的。

# 从左侧吐出一个人
LPOP queue
# 再次看队伍
LRANGE queue 0 -1

发现 "A" 不见了,说明他打完饭走了。这就是经典的 先进先出 (FIFO) 队列。

4.4.4 Set 集合实战 (性格标签自动去重)

大家还记得吗?Set 的最大特点是:无序且去重

# 给赵六贴标签,故意多贴几个重复的"宅"
SADD tags:ZhaoLiu "开心" "阳光" "宅" "宅" "宅"

# 查看最终贴上了哪些标签
SMEMBERS tags:ZhaoLiu

实验现象

执行完 SMEMBERS 后,你发现了什么?

  • "宅" 只剩下一个了。系统自动帮我们过滤了重复的脏数据。
  • 输出的顺序可能不是你当初敲进去的顺序(因为它是无序桶)。

Set 高级实战 (找共同爱好)

现在我们有李四和王五两个人,想知道他们有没有可能成为好朋友(找共同爱好)。

构建数据集

# 李四的爱好
SADD hobby:Lisi "sing" "cooking" "coding" "draw"
# 王五的爱好
SADD hobby:Wangwu "dance" "sleep" "coding" "draw"

一键求交集 (SINTER)

# 让 Redis 算出他们的共同爱好
SINTER hobby:Lisi hobby:Wangwu

结果瞬间出来了:coding 和 draw。这就是大厂做“推荐好友”的核心原理之一!

4.4.5 ZSet 有序集合实战 (期末总分排行榜)

录入成绩 (ZADD)

语法:ZADD key 分数 成员名字

# 将四个同学的分数录入 rank 榜
ZADD class_rank 85 "Xiaoming"
ZADD class_rank 99 "Xueba"
ZADD class_rank 59 "Xuezha"
ZADD class_rank 75 "Xiaohong"

查看名次 (ZREVRANGE)

排行榜通常从高到低排,所以用带 REV (反转) 的命令。

# 查前三名 (0 是第一名,2 是第三名)
ZREVRANGE class_rank 0 2 WITHSCORES

加了 `WITHSCORES` 就能同时把他们的分数也打印出来。学霸(Xueba)妥妥的第一名!

终极 Boss 挑战:独立实战测验

刚才大家是跟着老师的代码敲的,
现在老师要把场景换成“淘宝电商系统”,请大家独立完成以下建表操作!

实战作业任务书 (请在15分钟内完成)

  • 任务 1 (String): 记录 iPhone15 的商品浏览量,初始为 0,然后模拟 3 个人访问了商品(自增3次),最后查出浏览量。
  • 任务 2 (Hash): 存入一件商品详情,Key是 product:101,里面要有三个字段:商品名(name)是"MacBook",价格(price)是"8999",库存(stock)是"50",并查出全套信息。
  • 任务 3 (List): 记录用户搜索历史,用户依次搜索了 "手机", "电脑", "耳机",请按用户的搜索顺序从左侧推入,并查出历史记录。
  • 任务 4 (Set): 这台电脑有两个促销标签库,双十一标签有: "满减", "包邮", "送鼠标";百亿补贴标签有: "降价", "包邮", "官方正品"。查出它们共同的标签。
  • 任务 5 (ZSet): 制作今日商品销量榜,矿泉水卖了 500 瓶,泡面卖了 1200 盒,火腿肠卖了 800 根。请查出销量最高的商品是谁。

本次实验课圆满结束!

能独立完成测验的同学,你们已经拿到了 Redis 的入门钥匙!

记得在关机前执行 `shutdown` 正常关闭 Redis 服务,别忘了保存你的代码笔记。