【前提:菜鸟学习的记录过程,如果有不足之处,还请各位大佬大神们指教(感谢)】
redis 简介
remote dictionary server 是一个开源的基于内存的数据存储系统
用在数据库,消息队列,在nosql数据库之一
把数据存储在内存中,提高io的读写速度,提升性能------redis
1.redis支持多种数据结构
2.redis使用方式 有三个类型
CLI 命令行界面 通过redis -CLI 命令行 工具去使用redisAPI 应用程序接口,用java,python常用的编程语言 使用redisGUI 图像用户界面,用一些 图形化工具
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系统安装redisdocker安装 ,在下载一个 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卸载了
-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
打开新终端窗口,执行:
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 五大数据结构速记图
┌────────────┐ ┌──────────────┐
│ String │──┐ │ List │
│ 键值对 │ │ │ 有序链表 │
└────────────┘ │ └──────────────┘
▼
┌────────────┐ ┌──────────────┐
│ Set │ │ Hash │
│ 无序不重复 │ │ 对象结构 │
└────────────┘ └──────────────┘
┌──────────────┐
│ ZSet │
│ 有序集合 │
└──────────────┘
(哦豁,先更新到这里....在学习笔记写的.痛失名字)
【感谢您的观看学习,制作不易,希望得到一个一键三连哈哈】