【前提:菜鸟学习的记录过程,如果有不足之处,还请各位大佬大神们指教(感谢)】
redis 简介
remote dictionary server 是一个开源的基于内存的数据存储系统
用在数据库,消息队列,在nosql数据库之一
把数据存储在内存中,提高io的读写速度,提升性能------redis
1.redis支持多种数据结构

2.redis使用方式 有三个类型
- CLI 命令行界面 通过redis -CLI 命令行 工具去使用redis
- API 应用程序接口,用java,python常用的编程语言 使用redis
- GUI 图像用户界面,用一些 图形化工具
3.redis的优势
- 性能极高
- 数据类型丰富,单键值对最大支持512M大小的数据
- 简单易用,支持所有主流编程语言
- 支持数据持久化,主从复制,哨兵模式
4.安装配置
在linux 系统安装---我的虚拟机是ubantu版本
在linux中
1. 更新软件包列表
sudo apt update
2. 安装 Redis
sudo apt install redis -y
检查 Redis 是否安装成功
1. 查看 Redis 版本
redis-server --version
2. 启动 Redis 服务
sudo systemctl start redis
3. 设置开机启动(可选)
sudo systemctl enable redis
测试 Redis 是否能正常使用
1. 使用 Redis 客户端连接
redis-cli
你会进入 Redis 命令行,看到类似:
127.0.0.1:6379>
2. 试试简单命令
set name rabbit
get name
结果会返回:
"rabbit"
说明 Redis 已经可以正常使用了。

退出 是 exit
版本号:
qiaobingbing@qiaobingbing-virtual-machine:~$ redis-server --version
Redis server v=7.4.1 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=1b64b5d478880de3
window安装 redis 稍微有点麻烦
- wsl 安装 一个linux系统,在linux系统安装redis
- docker安装 ,在下载一个 redis镜像
- 传统window文件安装,但是安装的redis版本很老。
5.学习redis
用linux 学习
1.启动
启动服务端:redis-server
命令,ctrl+C 关闭服务

我的系统好像是默认redis自动开启,可以ctrl+C 关闭redis服务
所以我只需要打开另一个窗口 输入启动客户端: redis-cli
弹出:
127.0.0.1:6379>
redis地址+默认端口号
2.安装GUI图形化工具
可以在官网下载 redisinsight-v2
|------------------------------------------|----------------|---------------|--------|
| 工具名 | 优点 | 安装方式 | 是否开源 |
| RedisInsight ✅推荐 | 官方出品,界面美观,功能强大 | 可直接下载 | ✅ 开源免费 |
| RDM (Redis Desktop Manager) | 跨平台、轻量级 | .deb 安装包或源码编译 | 部分版本开源 |
| Another Redis Desktop Manager (ARDM) | 开源版 RDM,界面现代 | AppImage/.deb | ✅ 开源免费 |
我要在window主机安装RedisInsight, 远程连接虚拟机(Linux)里的 Redis 服务 。
【Windows主机】 ← 图形化工具(RedisInsight / RDM)
│
└──连接→【Linux虚拟机(Ubuntu)】 ← Redis 服务运行在 6379 端口
3.让 Linux 的 Redis 允许远程访问
Redis 默认只监听 127.0.0.1(本机访问),我们要改成监听全部 IP。
1. 编辑配置文件
sudo nano /etc/redis/redis.conf
2. 找到并修改这行:
bind 127.0.0.1
改成:
bind 0.0.0.0
3. (推荐)设置密码(防止暴露风险)
找到下面行,取消注释并设置密码:
# requirepass yourpassword
改为:
requirepass 123456
4. 关闭保护模式(如果要远程访问必须关)
找到这行:
protected-mode yes
改为:
protected-mode no
5. 重启 Redis
sudo systemctl restart redis
📌 第二步:查看虚拟机 IP 地址
ip a
找到虚拟机的内网 IP,比如:
192.168.200.128
记下这个 IP,你主机就是连这个地址 + 6379 端口的。
-
确保你的虚拟机是 桥接模式 或 主机网络模式(Host-only),否则主机无法访问虚拟机的 IP。
-
虚拟机不要启用过强的防火墙(如
ufw
),或开放 6379 端口:sudo ufw allow 6379
|----------------------------|------|
| 检查点 | 是否正确 |
| Redis 配置中 bind 0.0.0.0
✅ | ✔️ |
| protected-mode no
✅ | ✔️ |
| 是否设置了密码 ✅ | ✔️ |
| 虚拟机是 桥接模式/Host-only ✅ | ✔️ |
| Windows 能 ping 通虚拟机 IP ✅ | ✔️ |
| 没有额外防火墙拦截 ✅ | ✔️ |
如果 telnet
不存在,可以先启用:
控制面板 → 启用或关闭 Windows 功能 → 勾选 Telnet Client
连接主机失败

你在虚拟机中 Redis 配置没问题:
- Redis 已监听
0.0.0.0:6379 ✅
- 防火墙关闭或放行了端口 ✅
- 配置文件已修改并重启 ✅
但 Windows 主机用 telnet
测试 Redis IP+端口,连接超时失败,说明:
🚧 你的主机(Windows)无法访问虚拟机(Linux)的 IP 地址
|---------------------|---------------|
| 检查项 | 状态 |
| bind 0.0.0.0
| ✅ 已开启 |
| protected-mode no
| ✅ 已关闭 |
| 正确监听 6379 端口 | ✅ 是 0.0.0.0
|
| 使用的配置文件是否生效 | ✅ 是 |
| Redis 服务正常运行中 | ✅ 是 |
| 主机能 ping 通虚拟机 IP | ✅ 是 |
| 已桥接网络模式 | ✅ 是 |
| 主机 telnet 仍然失败 | ❌ 依然失败 |
【想用图形化工具的小伙伴,自己去尝试了,我自己捣鼓了liunx的桥接模式,NAT模式,NAT端口转发,关闭防火墙,关闭VPN,我都连接RedisInsight失败了,伤心了,已老实】
6.学习redis目标
|--------------|-----------------------------------------------|
| 学习目标 | 命令行实现方式(示例) |
| 启动 Redis 服务 | sudo systemctl start redis
或 redis-server
|
| 连接 Redis | redis-cli
|
| 设置 Key | set name rabbit
|
| 获取 Key | get name
|
| 删除 Key | del name
|
| 查看所有键 | keys *
|
| 设置过期时间 | expire name 60
|
| 查看 key 剩余时间 | ttl name
|
| 查看 Redis 配置 | CONFIG GET *
|
| 设置密码并验证 | AUTH 密码
,配置里 requirepass
设置密码 |
| 了解不同数据结构(重点) | lpush
hset
sadd
zadd
等 |
7.GUI 工具的缺点
|-----------------------------------------|-------------------------|
| GUI 工具 | 问题 |
| RedisInsight/AnotherRedisDesktopManager | 对新手是黑盒,反而难以理解 Redis 本质 |
| 连接配置麻烦 | NAT/桥接/IP、防火墙/密码配置很容易卡壳 |
| 占资源 | 比较吃内存和 CPU,虚拟机容易卡 |
🔰8:Redis 基础命令熟练(CLI 操作)
|---------------|-----------------------------------------------------|----------------------|
| 目标 | 内容 | 练习命令 |
| 了解 Redis 是什么 | 内存数据库、键值对存储、五大数据结构、持久化机制 | --- |
| 安装并启动 Redis | sudo apt install redis
redis-server
redis-cli
| --- |
| 操作字符串(string) | set
get
incr
append
strlen
| set name rabbit
|
| 操作列表(list) | lpush
rpush
lrange
lpop
rpop
| lpush fruits apple
|
| 操作集合(set) | sadd
smembers
srem
| sadd tags redis
|
| 操作哈希(hash) | hset
hget
hgetall
| hset user name tom
|
| 操作有序集合(zset) | zadd
zrange
zscore
| zadd rank 100 tom
|
| 通用命令 | del
exists
expire
ttl
keys *
| --- |
| 密码配置 + 连接验证 | requirepass
redis-cli -a 密码
| |
9.五种基础数据类型
# 查看 Redis 服务是否运行
ps -ef | grep redis
# 启动 Redis(如果还没开)
sudo systemctl start redis
# 开机自启(建议加上)
sudo systemctl enable redis
# 用 redis-cli 连接
redis-cli
✅ 出现:127.0.0.1:6379> 就说明进入成功!

掌握 Redis 中最基本的类型:键值对(key-value)
1. 字符串:命令 + 示例
|----------|---------|----------------------------|
| 命令 | 含义 | 示例 |
| SET
| 设置一个键值对 | SET name rabbit
|
| GET
| 获取值 | GET name
|
| DEL
| 删除 key | DEL name
|
| INCR
| 自增(默认1) | SET count 1
INCR count
|
| APPEND
| 字符串拼接 | APPEND name "_dev"
|
实操练习
redis的键是区分 大小写的,默认字符串存储数据,二进制。很多类型存储到redis
EXISTS --看key键 是否存在
KEYS * --查看所有的key键 有哪些
SET user:1 "Xiaoming"
GET user:1
DEL user:1
SET score 10
INCR score
APPEND score " points"
SET age 22
127.0.0.1:6379> SET age 22
OK
127.0.0.1:6379> GET age
"22"
127.0.0.1:6379> DEL age
(integer) 1
127.0.0.1:6379> GET age
(nil)
127.0.0.1:6379> EXISTS age
(integer) 0
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379>



127.0.0.1:6379> KEYS *me
1) "name"
127.0.0.1:6379> SET myname qbb
OK
127.0.0.1:6379> SET yourname zxx
OK
127.0.0.1:6379> keys * me
(error) ERR wrong number of arguments for 'keys' command
127.0.0.1:6379> KEYS *me
1) "name"
2) "myname"
3) "yourname"
#全部的键都被删掉了
在* 后面加上 me,可以查找带有me的 key键
全部key删掉
#全部的键都被删掉了 ,输入: FLUSHALL
中文查看
redis对中文的不支持,因为是二进制存储,反斜杠是指 十六进制。
如果想显示中文,先 quit (exit) ,退出客户端
重新登陆 输入: redis-cli --raw
让原始形式的内容 出现,这时候 在 GET name
就会出现中文了。
输入 clear 清空这个页面
127.0.0.1:6379> SET name 朱
OK
127.0.0.1:6379> get name
"\xe6\x9c\xb1"
----------------------------------------------------
127.0.0.1:6379> exit
qiaobingbing@qiaobingbing-virtual-machine:~$ redis-cli --raw
127.0.0.1:6379> GET name
NOAUTH Authentication required.
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> GET name
朱
127.0.0.1:6379>
过期时间 (EXPIRE,SETEX)
输入TTL name
,表示-1 说明没有设置过期时间,
127.0.0.1:6379> TTL name
-1
127.0.0.1:6379>
用 EXPIRE 设置过期时间 ,设置10秒,用TTL 查看还剩时间
最后用GET name 获取key ,发现输出空了,表示key 过期了,看不到这个键了
127.0.0.1:6379> EXPIRE name 10
1
127.0.0.1:6379> ttl name
-2
127.0.0.1:6379> TTL name
-2
127.0.0.1:6379> GET name
127.0.0.1:6379>
SETEX 也可以设置过期时间
SETEX key 时间
127.0.0.1:6379> SETEX name 10 猪猪
OK
127.0.0.1:6379> TTL name
7
127.0.0.1:6379> TTL name
6
127.0.0.1:6379> TTL name
5
127.0.0.1:6379> TTL name
3
127.0.0.1:6379> TTL name
2
127.0.0.1:6379> TTL name
1
127.0.0.1:6379> TTL name
-2
127.0.0.1:6379> get name
127.0.0.1:6379>
2.列表(List)
目的
学习 Redis 的链表结构,适合:消息队列、评论列表
一般用来存储和操作一组有顺序的数据
命令 + 示例
|----------|-------|-----------------------|
| 命令 | 含义 | 示例 |
| LPUSH
| 从左侧插入 | LPUSH tasks "task1"
|
| RPUSH
| 从右侧插入 | RPUSH tasks "task2"
|
| LRANGE
| 获取列表 | LRANGE tasks 0 -1
|
| LPOP
| 左侧弹出 | LPOP tasks
|
| RPOP
| 右侧弹出 | RPOP tasks
|
实操练习
LPUSH fruits "apple"
RPUSH fruits "banana"
LPUSH fruits "orange"
LRANGE fruits 0 -1
LPOP fruits
RPOP fruits
# 字母a 左侧插入
127.0.0.1:6379> LPUSH letter a
1
# 获取列表,key 开始位置(默认0) 结束位置(-1 最后一个)
127.0.0.1:6379> LRANGE letter 0 -1
a
127.0.0.1:6379> LPUSH letter b
2
127.0.0.1:6379> LPUSH letter c
3
127.0.0.1:6379> LPUSH letter d
4
# (0 -1 相当于获取第一个 到 最后一个元素,所有数据)
127.0.0.1:6379> LRANGE letter 0 -1
d
c
b
a
# 也可以一次性 左侧插入 多个数据
127.0.0.1:6379> LPUSH letter e f g h i j k
11
# 注意获取的数据是反过来的 LPUSH 是按照从左往右顺序插入到列表头部
127.0.0.1:6379> LRANGE letter 0 -1
k
j
i
h
g
f
e
d
c
b
a
# 右侧插入 f
127.0.0.1:6379> RPUSH letter f
12
127.0.0.1:6379> LRANGE letter 0 -1
k
j
i
h
g
f
e
d
c
b
a
f

删除 : (头部)左删除LPOP and 右删除RPOP(尾部)
也可以一次性删除很多个 数据 【 LPOP key 数字(个数,删几个)】
LRANGE 获取列表数据
127.0.0.1:6379> LPOP letter
k
127.0.0.1:6379> RPOP letter
f
127.0.0.1:6379> LRANGE letter 0 -1
j
i
h
g
f
e
d
c
b
a
#

Redis 的 LPOP
和 RPOP
在 6.2 以前版本 ,只支持弹出一个元素 ,不支持你写的 LPOP letter 2
这种"弹出多个"的语法。
你当前 Redis 是 6.0.16 ,版本太低,所以只能:一个一个删除
【更新redis 版本到7.0】
重新下载 Redis 7.2.5
curl -O http://download.redis.io/releases/redis-7.2.5.tar.gz
第三步:解压
tar -xzf redis-7.2.5.tar.gz
如果你没装 make
,先安装:
sudo apt update
sudo apt install build-essential -y
第四步:编译 Redis
cd redis-7.2.5
make
这一步会花费几分钟,编译完成后你就拥有了最新版 Redis。
✅ 四、安装完成后运行
直接运行(不覆盖旧版 Redis):
src/redis-server
再打开新终端,执行客户端命令:
cd ~/redis-7.2.5
src/redis-cli
就可以测试新版的命令了,比如:
LPUSH letter a b c d e
LPOP letter 2 # Redis 6不支持,Redis 7+支持
md,我的6和7版本在一起,就卡机了,我还是老实把之前redis版本删掉吧
把旧版本的redis6.1卸载了
sql
-virtual-machine:~/redis-7.2.5$ cd ~
-virtual-machine:~$ sudo systemctl stop redis
-virtual-machine:~$ sudo apt remove redis-server -y
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
liblua5.1-0 liblzf1 lua-bitop lua-cjson redis-tools
使用'sudo apt autoremove'来卸载它(它们)。
下列软件包将被【卸载】:
redis-server
升级了 0 个软件包,新安装了 0 个软件包,要卸载 1 个软件包,有 72 个软件包未被升级。
解压缩后将会空出 196 kB 的空间。
(正在读取数据库 ... 系统当前共安装有 223222 个文件和目录。)
正在卸载 redis-server (5:6.0.16-1ubuntu1) ...
正在处理用于 man-db (2.10.2-1) 的触发器 ...
-virtual-machine:~$ sudo cp ~/redis-7.2.5/src/redis-server /usr/local/bin/
-virtual-machine:~$ sudo cp ~/redis-7.2.5/src/redis-cli /usr/local/bin/
-virtual-machine:~$ redis-server -v
Redis server v=7.2.5 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=cbc8782cb6e8f354
-virtual-machine:~$
重启 redis7版本
cd ~/redis-7.2.5
src/redis-server redis.conf
打开新终端窗口,执行:
sql
cd ~/redis-7.2.5
src/redis-cli
daemonize yes # 改成 yes,启用后台运行
bind 0.0.0.0 # 允许远程连接
requirepass 123456 # 设置访问密码
protected-mode no # (可选)允许公网连接(测试环境用)
LPOP RPOP 一次多删除
成功 LPOP一次性删除多个数据
127.0.0.1:6379> LPOP letter 2
1) "k"
2) "j"
127.0.0.1:6379> LRANGE letter 0 -1
1) "i"
2) "h"
3) "g"
4) "f"
5) "e"
6) "d"
7) "c"
8) "b"
9) "a"
【学会这些,就可以做一个简单的消息队列】
1.先用 RPOP命令RPOP letter
尾部删掉 一个元素,-----一个简单的先进先出队列
元素从0开始算
127.0.0.1:6379> LRANGE letter 0 -1
1) "i"
2) "h"
3) "g"
4) "f"
5) "e"
6) "d"
7) "c"
8) "b"
9) "a"
127.0.0.1:6379> RPOP letter
"a"
LRTIM(修剪)
删除列表中的元素 LTRIM (修剪)命令,删除指定范围以外的数据
(只保留 start stop 之间的元素)
LTRIM key 开始 结束
127.0.0.1:6379> LTRIM letter 1 5
OK
-- 只保留 1-5 之间的元数
127.0.0.1:6379> LRANGE letter 0 -1
1) "h"
2) "g"
3) "f"
4) "e"
5) "d"
127.0.0.1:6379>
3.:集合(Set)
🎯 目的
掌握无顺序,不重复,集合。常用于:标签、兴趣爱好、去重
都是S 开头
🚀 命令 + 示例
|-------------|--------|------------------------|
| 命令 | 含义 | 示例 |
| SADD
| 添加元素 | SADD tags redis
|
| SMEMBERS
| 查询所有元素 | SMEMBERS tags
|
| SREM
| 移除元素 | SREM tags redis
|
| SISMEMBER
| 是否存在 | SISMEMBER tags redis
|
🧪 实操练习
SADD skills python java redis
SMEMBERS skills
SISMEMBER skills java
SREM skills redis
SADD 可以一次性添加几个 值
SADD key 值
SMEMBERS key查看数据 smembers
SADD不能添加重复的元素,添加失败
127.0.0.1:6379> SADD course math redis
(integer) 2
127.0.0.1:6379> SMEMBERS course
1) "math"
2) "redis"
127.0.0.1:6379> SADD course chinese japanese english music
(integer) 4
127.0.0.1:6379> SMEMBERS course
1) "math"
2) "redis"
3) "chinese"
4) "japanese"
5) "english"
6) "music"
SISMEMBERS key
判断 值 是否在集合set 里面
1 表示 存在
0 表示 不存在
127.0.0.1:6379> SISMEMBER course math
(integer) 1
127.0.0.1:6379> SISMEMBER course python
(integer) 0
SREM key 值
删除元素
127.0.0.1:6379> SREM course math
(integer) 1
两个集合之间有交集,并集 等运算
4.:哈希(Hash)
🎯 目的4
哈希结构 适合存储对象(键值对套键值对),如:用户信息
键值对集合
H开头
🚀 命令 + 示例
|-----------|--------|---------------------------|
| 命令 | 含义 | 示例 |
| HSET
| 设置字段 | HSET user:1 name rabbit
|
| HGET
| 获取字段值 | HGET user:1 name
|
| HGETALL
| 获取所有字段 | HGETALL user:1
|
| HDEL
| 删除字段 | HDEL user:1 name
|
🧪 实操练习
HSET user:1 name rabbit age 21
HGET user:1 name
HGETALL user:1
HDEL user:1 age
- HSET 键 key 值
- HGET 键
- HGETALL key 获取哈希中所有的键值对
- HDEL 删除键值对
- HEXISTS 判断某个键值对是否存在
- HKEYS 获取所有键
- HLEN 获取所有哈希键值对的数量
相当于在 Redis 中创建了一个名为 person
的"字典"或"对象":
127.0.0.1:6379> HSET person name zxx
1
127.0.0.1:6379> HSET person age 3
1
127.0.0.1:6379> HGET person name
zxx
127.0.0.1:6379> HGET person age
3
-- HGETALL 获取哈希中所有的键值对 键:值
127.0.0.1:6379> HGETALL person
name
zxx
age
3
--HDEL 删除键值对
127.0.0.1:6379> HDEL person age
1
127.0.0.1:6379> HGETALL person
name
rabbit
127.0.0.1:6379>
--HEXISTS 判断某个键值对是否存在
127.0.0.1:6379> HEXISTS person age
0
127.0.0.1:6379> HEXISTS person name
1
-- HKEYS 获取所有键
--HLEN 获取所有哈希键值对的数量
127.0.0.1:6379> HKEYS person
name
sex
127.0.0.1:6379> HLEN person
2
✅ 5.:有序集合(ZSet)
🎯 目的
适合:排行榜、积分榜(有序去重),有顺序,去重,排序,
🚀 命令 + 示例
|----------|------|-------------------------------|
| 命令 | 含义 | 示例 |
| ZADD
| 添加成员 | ZADD rank 100 tom
|
| ZRANGE
| 查询成员 | ZRANGE rank 0 -1 WITHSCORES
|
| ZREM
| 删除成员 | ZREM rank tom
|
| ZSCORE
| 获取分数 | ZSCORE rank tom
|
🧪 实操练习
ZADD rank 100 tom 120 jerry 90 spike
ZRANGE rank 0 -1 WITHSCORES
ZSCORE rank jerry
ZREM rank spike
ZADD 增加元素,可以一次性添加多条
ZRANGE key 开始 结束 ---查看有序集合的元素
ZSCORE key 查看某个元素的分数
ZRANK key 查看某个元素的排行(分数从小到大排序,0位开始)
ZREVRANK key 查看某元素 排行(从大到小 排序,反转)
qiaobingbing@qiaobingbing-virtual-machine:~/redis-7.2.5$ redis-cli --raw
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> ZADD result 600 重庆大学
1
127.0.0.1:6379> ZADD result 520 北京大学
1
127.0.0.1:6379> ZADD result 525 交通大学
1
-- 只有成员 没有分数 要在后面加上 WITHSCORES
127.0.0.1:6379> ZRANGE result 0 -1
北京大学
交通大学
重庆大学
127.0.0.1:6379> ZRANGE result 0 -1 WITHSCORES
北京大学
520
交通大学
525
重庆大学
600
-- 查看某个元素的分数
127.0.0.1:6379> ZSCORE result 交通大学
525
-- 查看某个元素的排行(分数从小到大排序,0位开始)
127.0.0.1:6379> ZRANK result 交通大学
1
127.0.0.1:6379> ZRANK result 重庆大学
2
127.0.0.1:6379> ZRANK result 北京大学
0
--查看某元素 排行(从大到小 排序,反转) 0 是第一名
127.0.0.1:6379> ZREVRANK result 北京大学
2
127.0.0.1:6379> ZREVRANK result 重庆大学
0
总结图:Redis 五大数据结构速记图
sql
┌────────────┐ ┌──────────────┐
│ String │──┐ │ List │
│ 键值对 │ │ │ 有序链表 │
└────────────┘ │ └──────────────┘
▼
┌────────────┐ ┌──────────────┐
│ Set │ │ Hash │
│ 无序不重复 │ │ 对象结构 │
└────────────┘ └──────────────┘
┌──────────────┐
│ ZSet │
│ 有序集合 │
└──────────────┘
(哦豁,先更新到这里....在学习笔记写的.痛失名字)
【感谢您的观看学习,制作不易,希望得到一个一键三连哈哈】