【前提:菜鸟学习的记录过程,如果有不足之处,还请各位大佬大神们指教(感谢)】
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 update2. 安装 Redis
sudo apt install redis -y检查 Redis 是否安装成功
1. 查看 Redis 版本
redis-server --version2. 启动 Redis 服务
sudo systemctl start redis3. 设置开机启动(可选)
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=1b64b5d478880de3window安装 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.conf2. 找到并修改这行:
bind 127.0.0.1改成:
bind 0.0.0.03. (推荐)设置密码(防止暴露风险)
找到下面行,取消注释并设置密码:
# requirepass yourpassword改为:
requirepass 1234564. 关闭保护模式(如果要远程访问必须关)
找到这行:
protected-mode yes改为:
protected-mode no5. 重启 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-clidaemonize 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 redisSADD 可以一次性添加几个 值
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) 0SREM 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 spikeZADD 增加元素,可以一次性添加多条
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       │
             │   有序集合    │
             └──────────────┘(哦豁,先更新到这里....在学习笔记写的.痛失名字)
【感谢您的观看学习,制作不易,希望得到一个一键三连哈哈】