当前位置: 首页 > news >正文

一小时学习Redis

前提:菜鸟学习的记录过程,如果有不足之处,还请各位大佬大神们指教(感谢)】

redis 简介

remote dictionary server 是一个开源的基于内存的数据存储系统

用在数据库,消息队列,在nosql数据库之一

把数据存储在内存中,提高io的读写速度,提升性能------redis

1.redis支持多种数据结构

2.redis使用方式 有三个类型

  • CLI 命令行界面 通过redis -CLI 命令行 工具去使用redis
  • API 应用程序接口,用java,python常用的编程语言 使用redis
  • GUI 图像用户界面,用一些 图形化工具

3.redis的优势

  1. 性能极高
  2. 数据类型丰富,单键值对最大支持512M大小的数据
  3. 简单易用,支持所有主流编程语言
  4. 支持数据持久化,主从复制,哨兵模式

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 22127.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 name127.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 name127.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 的 LPOPRPOP6.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) 2127.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

  1. HSET 键 key 值
  2. HGET 键
  3. HGETALL key 获取哈希中所有的键值对
  4. HDEL 删除键值对
  5. HEXISTS 判断某个键值对是否存在
  6. HKEYS 获取所有键
  7. HLEN 获取所有哈希键值对的数量

相当于在 Redis 中创建了一个名为 person 的“字典”或“对象”:

127.0.0.1:6379> HSET person name zxx
1
127.0.0.1:6379> HSET person age 3
1127.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       ││   有序集合    │└──────────────┘

(哦豁,先更新到这里....在学习笔记写的.痛失名字)

【感谢您的观看学习,制作不易,希望得到一个一键三连哈哈】

http://www.dtcms.com/a/286776.html

相关文章:

  • 使用 jar -xvf 解压JAR文件无反应怎么办?
  • Maven私服仓库,发布jar到私服仓库,依赖的版本号如何设置,规范是什么
  • 帆软可视化图
  • mave手动下载某个依赖,到本地库
  • 更适合后端宝宝的前端三件套之JavaScript
  • /字符串/
  • 《每日AI-人工智能-编程日报》--2025年7月18日
  • Simulink 按位控制的控制DO信号变量转换为uint16类型的控制字
  • Flux Kontext Lora 模型训练环境搭建
  • 软件维护全维度解析:从修复到进化的生命周期管理
  • linux制作镜像、压缩镜像、烧录的方法
  • 虚拟机centos服务器安装
  • Linux操作系统(练习一)
  • InnoDB 多版本控制 慢sql排查(基于MySQL 5.7)
  • Altera Quartus:图形化界面配置生成jic和pof文件
  • 京东店铺入鼎的全面分析与自研难度评估
  • AE MDX L6 L12 L18 电源手侧操作使用说明
  • 智能交通4G专网解决方案,引领智慧出行新时代
  • Entity Framework (EF) 深度解析
  • 数据查找 二叉查找树
  • 网关-微服务网关实现
  • AI大模型打造金融智能信审助手04.七大金融监管相关政策
  • 活动图描述场景
  • CityEngine自动化建模
  • 代理模式及优化
  • 代码随想录day38dp6
  • STM32-第七节-TIM定时器-3(输入捕获)
  • 全排列 II
  • C#通过HslCommunication连接西门子PLC1200,并防止数据跳动的通用方法
  • 反序列化漏洞2-魔术方法介绍与演示