3.打开cmd终端,切换到redis的存放目录
redis-server.exe redis.windows.conf #启动redis服务
4.使用redis-cli客户端程序安装即可
redis-cli.exe -h 127.0.0.1 -p 6379
二,linux安装redis
1.网络安装redis
#yum源下载
yum -y install redis-server
2.源码包安装redis
官网下载:Download | Redis
1.准备安装和数据目录
mkdir -p /data/soft
mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}
2.下载redis安装包
cd /data/soft
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
3.解压redis到/opt/redis_cluster/
tar xf redis-5.0.7.tar.gz -C /opt/redis_cluster/
ln -s /opt/redis_cluster/redis-5.0.7 /opt/redis_cluster/redis
4.切换目录安装redis
cd /opt/redis_cluster/redis
make && make install
5.编写redis启动配置文件
vim /opt/redis_cluster/redis_6379/conf/6379.conf
添加:
bind 127.0.0.1 192.168.2.1 #指定启动地址
port 6379 #端口号
daemonize yes
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid #存放PID的文件目录
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log #存放日志的文件目录
databases 16
dbfilename redis.rdb #数据库文件
dir /opt/redis_cluster/redis_6379 #群集文件
保存退出
6.启动当前的服务
redis-server /opt/redis_cluster/redis_6379/conf/6379.conf
7.关闭服务
redis-cli shudown
8.登录
redis-cli -h 127.0.0.1 -p 6379 #指定redis的地址,和端口号
三,redis命令
一,redis 键(key)
命令 | 作用 |
set [key] [value] | 创建键 |
get [key] | 读取键内容 |
del [key] | 删除key |
dump [key] | 序列化 |
exists [key] | 检查指定的key是否存在 |
expire [key] seconde | 为给定key设置过期时间,以秒计数 |
expireat [key] timestamp | 与expore类似,支持unix时间戳 |
pexpire [key] milliseconds | 设置key过期时间,以毫秒为单位 |
pexpireat [key] time | 设置key过期时间戳,以毫秒为单位 |
keys [pattern] | 查找所有符合给定模式的key |
move key db | 将当前数据库的key移动到指定的数据库db中 |
persist key | 移除key的过期时间,key将持久保持 |
pttl key | 以毫秒为单位返回key的剩余过期时间 |
tty key | 以秒为单位,返回key的剩余生存时间 |
randomkey | 从数据库中随机返回一个key |
rename key newkey | 修改key的名称 |
renamenx key newkey | 仅当newket不存在时,将key改名为newkey |
type key | 返回key所储存的值的类型 |
二,redis 字符串(string)
命令 | 作用 |
set key value | 设置指定key的值 |
get key | 获取key的值 |
getrange key start end | 返回key中字符串的子字符 |
getset key value | 将key的值设为value,并返回旧的值 |
getbit key offset | 对key所有存储的字符串值,获取指定偏移量上的位 |
mget key1 | 获取所有一个或多个key的值 |
setbit key offset value | 对key所有储存的字符串值,设置或清除指定偏移量上的位 |
setex key seconds value | 将值value关联到key,并将key的过期时间设为seconds |
setnx key value | 只要在key不存在时设置key的值 |
strlen key | 返回key所储存的字符串的长度 |
mset key value [key value] | 同时设置一个或多个key-value |
msetnx key value [key value] | 同时设置一个或多个key-value,当且仅所有给定key都不存在 |
incr key | 将key中存储的数字+1 |
incrby key increment | 将key所存储的值加上给定的浮点增量值 |
decr key | 将key中储存的数字减一 |
append key value | 如果key已经存在并且是一个字符串,append命令将指定的value追加到该key原来值(value)的末尾 |
三,redis 哈希(hash)
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
命令 | 作用 |
hdel key field | 删除一个或多个哈希字段 |
hexists key field | 查看哈希表key中,指定的字段是否存在 |
hget key field | 获取在哈希表中指定key的所有字段和值 |
hgetall key | 获取在哈希表中指定key的所有字段和值 |
hincrby key field increment | 为哈希表key中的指定字段的整数值加上增量increment |
hkeys key | 获取所有哈希表中的字段 |
hlen key | 获取哈希表中字段的数量 |
hmget key field1 | 获取所有给定字段的值 |
hmset key field1 value | 同时将多个field-value对设置到哈希表key中 |
hsetnx key filed value | 只有在字段field不存在时,设置哈希表字段的值 |
hset key field value | 将哈希表key中的字段field的值设为value |
hvals key | 获取哈希表中所有的值 |
四,redis 列表(list)
命令 | 作用 |
blpop key1 timeout | 移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 |
brpop key | 移出并获取列表的最后一个元素 |
lindex key index | 通过索引获取列表中的元素 |
llen key | 获取列表长度 |
lpop key | 移出并获取列表的第一个元素 |
lpush key value | 将一个或多个值插入到列表头部 |
lrange key start stop | 获取列表指定范围内的元素 |
lrem key count value | 移除列表元素 |
lset key index value | 通过索引设置列表元素的值 |
ltrim key start stop | 对一个列表进行修剪,让列表只保留指定区间内的元素 |
rpop key | 移除列表 |
rpoplpush source destination | 移除列表 |
rpush key value1 | 在列表中添加一个或多个值 |
rpushx key value | 为已存在的列表添加值 |
五,redis 集合(set)
命令 | 作用 |
sadd key member1 | 向集合添加一个或多个成员 |
scard key | 获取集合的成员数 |
sdiff key1 | 返回第一个集合与其他集合之间的差异 |
sdiffstore destination key1 | 返回给定所有集合的差集并存储在destination |
sinter key1 key2 | 返回给定所有集合的交集 |
sinterstore destination key1 | 判断 |
sismember key member | 返回集合中的所有成员 |
smove source destination member | 将member 元素从source集合移动到destination集合 |
spop key | 移除并返回集合中的一个随机元素 |
srandmember key [count] | 返回集合中一个或多个成员 |
srem key member1 | 移除集合中一个或多个成员 |
sunion key1 | 返回所有给定集合的并集 |
sunionstore destination key1 | 所有给定集合并集存储在destination集合中 |
sscan key cursor [match patterm] [count count] | 迭代集合中的元素 |
六,reids 有序集合(sorted set)
命令 | 作用 |
[ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
zcard key | 获取有序集合的成员数 |
zcount key min max | 计算在有序集合中指定区间分数的成员数 |
zincrby key increment member | 有序集合中对指定成员的分数加上增量increment |
zlexcount key min pmax | 在有序集合中计算指定字典区间内成员数量 |
zrange key start stop | 通过索引区间返回有序集合指定区间内的成员 |
zrangebylex key min max | 通过字典区返回有序集合的成员 |
zrank key member | 返回有序集合中指定成员的索引 |
zrem key member member | 移除有序集合中的一个或多个成员 |
zremrangebylex key min max | 移除有序集合中给定的字典区间的所有成员 |
zremrangebyrank key start stop | 移除有序集合中给定的排名区间的所有成员 |
zrevrank key_member | 返回有序集合中指定分数区间内的成员,分数从高到低 |
四,redis持久化
1.持久化类型
rdb方式:
rdb:是redis默认的持久化方法,rdb方法是通过快照完成的,他保存的是某一时的数据并不关注过程
优点:
-
rdb是二进制压缩文件,占用空间小,便于传输(传给slave)
-
主进程fork子进程,可以最大化redis性能
-
使用RDB文件来恢复数据快
缺点:
-
不保证数据完整性,会丢失最后一次快照以后更改的所有数据
-
父进程在fork子进程的时候如果主进程比较大会阻塞
aof方式:
aof:开启aof持久化后redis将所有对数据进行写入的命令(以及参数),记录到aof文件,以此达到记录数据库状态的目的,这样当redis重启后只要按顺序回放这些命令就会恢复到原始状态了
优点:
-
AOF存储命令操作
-
大概率保证数据不丢失
缺点:
- 日志量巨大
ROB与AOF对比
-
RDB存某个时刻的数据快照,采用二进制压缩存储,AOF存操作命令,采用文本存储(混合);
-
RDB性能高,AOF性能较低。
-
RDB在配置触发状态会丢失最后一次快照以后更改的所有数据,AOF设置每一秒保存一次,则最多丢2秒数据
-
redis以主服务器模式运行,RDB不会保存过期键值对数据,redis以从服务器模式运行,rdb会保存过期键值对,当主服务器向从服务器同步,再清空过期键值对
-
aof写入文件时,对过期的key会追加一条del命令,当执行AOF重写,会忽略过期key和del命令
应用场景
-
内存数据库rdb+aof数据不容易丢失
-
缓存数据器rdb性能高 不建议使用aof(性能差)
-
在数据还原时 有rdb+aof则还原aof,因为rdb会造成文件的丢失,aof相对数据要完整
2.rdb配置
redis-cli 登录redis
bgsave rdb保存命令
vim /opt/redis_cluster/redis_6379/conf/6379.conf
添加:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照
3.aof配置
vim /opt/redis_cluster/redis_6379/conf/6379.conf
添加:
appendonly yes #启用AOF持久化
appendfilename "redis.aof" #指定AOF文件名
appendfsync everysec #每秒同步一次
4.设置完成后,重启服务
redis-cli shutdown
redis-server /opt/redis_cluster/redis_6379/conf/6379.conf
五,主从复制
1.redis主从复制
为解决单点故障把数据复制到一个或多个副本副本服务器(从服务器),实现故障恢复和负载均衡
2.开启第二台服务器,安装redis
(1)把第一台服务器的redis安装目录,scp到第二台服务器上
scp -rp /opt/redis_cluster/ root@192.168.8.20:/opt
(2)在第二台服务器上,make install安装redis
cd /opt/redis_cluster/redis
make install
vim /opt/redis_cluster/redis_6379/conf/6379.conf
修改:
bind 127.0.0.1 192.168.2.2
slaveof 192.168.2.1 6379
保存退出
(3)启动服务
redis-server /opt/redis_cluster/redis_6379/conf/6379.conf
(4)主服务器上新建键值,测试从服务器自动同步
(5)从服务器在同步过程中,只能复制主数据库的数据,不能手动添加修改数据;
如果从服务器非要修改数据,需要断开同步:
redis-cli slaveof no one
六,redis集群
一,redis集群的概念
Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation)。
Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的错误。
Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。
redis集群提供了以下两个好处:
-
将数据自动切分到多个节点的能力
-
当集群中的一部分节点失灵或无法进行通信,仍然可以继续处理命令请求能力
二,集群redis部署
环境:
redis1-2:192.168.2.1
redis2-3:192.168.2.2
redis3-4:192.168.2.3
实现环境:
一,安装redis
1.redis1部署
1.安装redis
[root@localhost ~]# tar -xf /mnt/redis-5.0.7.tar.gz -C /opt/
[root@localhost ~]# /opt/redis-5.0.7
[root@localhost redis-5.0.7]# make && make install
[root@localhost ~]# ln -s /opt/redis-5.0.7/ /opt/redis #做一个软链接,方便以后更新
注意(当make编译时出现问题,大多数原因是缺少gcc编译器):[root@localhost redis-5.0.7]# yum -y install gcc gcc-c++
2.创建配置文件存放位置
[root@localhost ~]# mkdir -p /opt/redis_cluster/redis_{6380,6381}/{conf,logs,pid}
[root@localhost ~]# mkdir -p /data/redis_cluster/redis_{6380,6381}
3.编写redis配置文件
[root@localhost ~]# cat >/opt/redis_cluster/redis_6380/conf/redis_6380.conf<<EOF
bind 192.168.2.1
port 6380
daemonize yes
pidfile "/opt/redis_cluster/redis_6380/pid/redis_6380.pid"
logfile "/opt/redis_cluster/redis_6380/logs/redis_6380.log"
dbfilename "redis_6380.rdb"
dir "/data/redis_cluster/redis_6380/"
cluster-enabled yes
cluster-config-file nodes_6380.conf
cluster-node-timeout 15000
EOF
4.创建6381端口的redis
[root@localhost ~]# cd /opt/redis_cluster/
[root@localhost redis_cluster]# cp redis_6380/conf/redis_6380.conf redis_6381/conf/redis_6381.conf
[root@localhost redis_cluster]# sed -i 's#6380#6381#g' redis_6381/conf/redis_6381.conf
5.启动redis
[root@localhost redis_cluster]# redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
[root@localhost redis_cluster]# redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
6.传递redis
[root@localhost opt]# scp -rp /opt/redis*/ root@192.168.2.2:/opt
[root@localhost opt]# scp -rp /opt/redis*/ root@192.168.2.3:/opt
2.redis2部署
1.重新安装一下redis
[root@localhost ~]# cd /opt/redis
[root@localhost redis]# make install
2.更改配置文件中的IP地址
[root@localhost redis]# find /opt/redis_cluster/redis_638* -type f -name "*.conf"|xargs sed -i "s#192.168.2.1#192.168.2.2#g"
3.创建存放数据的目录
[root@localhost redis]# mkdir -p /data/redis_cluster/redis_{6380,6381}
4.开启redis服务器
[root@localhost redis]# redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
[root@localhost redis]# redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
3.redis3部署(同redis2除IP外)
二,手动配置节点发现
节点发现使用命令: CLUSTER MEET {IP} {PORT}
提示:在集群内任意一台机器执行此命令就可以
1.添加节点在192.168.2.1:6380
[root@localhost opt]# redis-cli -h 192.168.2.1 -p 6380 cluster meet 192.168.2.1 6381
OK
[root@localhost opt]# redis-cli -h 192.168.2.1 -p 6380 cluster meet 192.168.2.2 6380
OK
[root@localhost opt]# redis-cli -h 192.168.2.1 -p 6380 cluster meet 192.168.2.2 6381
OK
[root@localhost opt]# redis-cli -h 192.168.2.1 -p 6380 cluster meet 192.168.2.3 6380
OK
[root@localhost opt]# redis-cli -h 192.168.2.1 -p 6380 cluster meet 192.168.2.3 6381
OK
[root@localhost opt]# redis-cli -h 192.168.2.1 -p 6380 cluster nodes
b6f47e859ad6a3b9b238778d1cf0df4f95710a1f 192.168.2.3:6380@16380 master - 0 1678676225000 4 connected
dee913166afa30b567b151e6e1196847ed0a8a96 192.168.2.2:6381@16381 master - 0 1678676226000 0 connected
693d6d17f5860887d3343ebe0083351cd9815c8d 192.168.2.3:6381@16381 master - 0 1678676226199 5 connected
961bb9571f4e2f64a320da2631ae8cfc3b78d1e1 192.168.2.1:6381@16381 master - 0 1678676224000 1 connected
9f48a4262474744dc22524b28096ccba111d236d 192.168.2.1:6380@16380 myself,master - 0 1678676223000 2 connected
d9ea4f26b2221a5497d78326a7c1aff828e98426 192.168.2.2:6380@16380 master - 0 1678676227207 3 connected
2.redis cluster通信流程
redis 集群采用 Gossip(流言)协议,Gossip 协议工作原理就是节点彼此不断交换信息,一段时间后所有的节点都会知道集群完整信息,这种方式类似流言传播。
通信过程:
1)集群中的每一个节点都会单独开辟一个 Tcp 通道,用于节点之间彼此通信,防火墙放行(端口号+10000).
2)每个节点在固定周期内通过特定规则选择结构节点发送 ping 消息
3)接收到 ping 消息的节点用 pong 消息作为响应。集群中每个节点通过一定规则挑选要通信的节点,每个节点可能知道全部节点,也可能仅知道部分节点,
只要这些节点彼此可以正常通信,最终他们会打成一致的状态,当节点出现故障,新节点加入,主从角色变化等,它能够给不断的ping/pong消息,从而达到同步目的。
通讯消息类型:
Gossip
Gossip 协议职责就是信息交换,信息交换的载体就是节点间彼此发送Gossip 消息。
常见 Gossip 消息分为:ping、 pong、 meet、 fail 等
- meet
meet 消息:用于通知新节点加入,消息发送者通知接受者加入到当前集群,meet 消息通信正常完成后,接收节点会加入到集群中并进行ping、 pong 消息交换
- ping
ping 消息:集群内交换最频繁的消息,集群内每个节点每秒想多个其他节点发送 ping 消息,用于检测节点是否在线和交换彼此信息。
- pong
Pong 消息:当接收到 ping,meet 消息时,作为相应消息回复给发送方确认消息正常通信,节点也可以向集群内广播自身的 pong 消息来通知整个集群对自身状态进行更新。
- fail
fail 消息:当节点判定集群内另一个节点下线时,回向集群内广播一个fail 消息,其他节点收到 fail 消息之后把对应节点更新为下线状态。
3.redis cluster手动分配槽位
注意:虽然节点之间已经互相发现了,但是此时集群还是不可用的状态,因为并没有给节点分配槽位,而且必须是所有的槽位都分配完毕后整个集群才是可用的状态。 反之,也就是说只要有一个槽位没有分配,那么整个集群就是不可用的.
[root@localhost ~]# redis-cli -h 192.168.2.1 -p 6380 cluster addslots {0..5460}
OK
[root@localhost ~]# redis-cli -h 192.168.2.2 -p 6380 cluster addslots {5461..10922}
OK
[root@localhost ~]# redis-cli -h 192.168.2.3 -p 6380 cluster addslots {10923..16383}
OK
查看:
[root@localhost ~]# redis-cli -h 192.168.2.1 -p 6380 cluster nodes
b6f47e859ad6a3b9b238778d1cf0df4f95710a1f 192.168.2.3:6380@16380 master - 0 1678677991468 4 connected 10923-16383
dee913166afa30b567b151e6e1196847ed0a8a96 192.168.2.2:6381@16381 master - 0 1678677992477 0 connected
693d6d17f5860887d3343ebe0083351cd9815c8d 192.168.2.3:6381@16381 master - 0 1678677990459 5 connected
961bb9571f4e2f64a320da2631ae8cfc3b78d1e1 192.168.2.1:6381@16381 master - 0 1678677991000 1 connected
9f48a4262474744dc22524b28096ccba111d236d 192.168.2.1:6380@16380 myself,master - 0 1678677992000 2 connected 0-5460
d9ea4f26b2221a5497d78326a7c1aff828e98426 192.168.2.2:6380@16380 master - 0 1678677993485 3 connected 5461-10922
4.手动分配集群高可用
[root@localhost ~]# redis-cli -h 192.168.2.1 -p 6381 cluster replicate d9ea4f26b2221a5497d78326a7c1aff828e98426 #输入第二台6380的ID
OK
[root@localhost ~]# redis-cli -h 192.168.2.2 -p 6381 cluster replicate b6f47e859ad6a3b9b238778d1cf0df4f95710a1f #输入第三台6380的ID
OK
[root@localhost ~]# redis-cli -h 192.168.2.3 -p 6381 cluster replicate 9f48a4262474744dc22524b28096ccba111d236d #输入第一台6380的ID
OK
5.redis cluster ASK路由介绍
在集群模式下,Redis接受任何键相关命令时首先会计算键对应的槽,再根据槽找出所对应的节点
如果节点是自身,则处理键命令;
否则回复MOVED重定向错误,通知客户端请求正确的节点,这个过程称为Mover重定向.
知道了ask路由后,我们使用-c选项批量插入一些数据
1.编写创建键值对脚本
[root@localhost ~]# vi input_key.sh
#!/bin/bash
for i in $(seq 1 10000)
do
redis-cli -c -h 192.168.2.1 -p 6380 set k_${i} v_${i} && echo "set k_${i} is ok"
done
#保存退出
#运行测试
bash input_key.sh
测试
[root@localhost ~]# redis-cli -c -h 192.168.2.1 -p 6380
192.168.2.1:6380> get k_10000
-> Redirected to slot [12695] located at 192.168.2.3:6380 #存放到了2.3上的第12695槽位
"v_10000"
192.168.2.3:6380> get k_1000
-> Redirected to slot [79] located at 192.168.2.1:6380 #存放到了2.1上的第79槽位
"v_1000"
三,故障转移
1.模拟redis2故障
[root@localhost ~]# redis-cli -h 192.168.2.2 -p 6380 shutdown
2.查看从是否晋升为主
[root@localhost ~]# redis-cli -h 192.168.2.1 -p 6380 cluster nodes
b6f47e859ad6a3b9b238778d1cf0df4f95710a1f 192.168.2.3:6380@16380 master - 0 1678679339733 4 connected 10923-16383
dee913166afa30b567b151e6e1196847ed0a8a96 192.168.2.2:6381@16381 slave b6f47e859ad6a3b9b238778d1cf0df4f95710a1f 0 1678679339000 4 connected
693d6d17f5860887d3343ebe0083351cd9815c8d 192.168.2.3:6381@16381 slave 9f48a4262474744dc22524b28096ccba111d236d 0 1678679337719 5 connected
961bb9571f4e2f64a320da2631ae8cfc3b78d1e1 192.168.2.1:6381@16381 master - 0 1678679338726 6 connected 5461-10922
9f48a4262474744dc22524b28096ccba111d236d 192.168.2.1:6380@16380 myself,master - 0 1678679338000 2 connected 0-5460
d9ea4f26b2221a5497d78326a7c1aff828e98426 192.168.2.2:6380@16380 master,fail - 1678679289623 1678679289320 3 disconnected
3.启动redis2:6380
[root@localhost redis]# redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
4.重回master
[root@localhost ~]# redis-cli -h 192.168.2.2 -p 6380 cluster failover
OK
[root@localhost ~]# redis-cli -h 192.168.2.1 -p 6380 cluster nodes
b6f47e859ad6a3b9b238778d1cf0df4f95710a1f 192.168.2.3:6380@16380 master - 0 1678679584000 4 connected 10923-16383
dee913166afa30b567b151e6e1196847ed0a8a96 192.168.2.2:6381@16381 slave b6f47e859ad6a3b9b238778d1cf0df4f95710a1f 0 1678679586000 4 connected
693d6d17f5860887d3343ebe0083351cd9815c8d 192.168.2.3:6381@16381 slave 9f48a4262474744dc22524b28096ccba111d236d 0 1678679586593 5 connected
### 最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
### 资料预览
给大家整理的视频资料:
![](https://img-blog.csdnimg.cn/img_convert/ab53329f0afa1d88e084411c873c4e59.png)
给大家整理的电子书资料:
![](https://img-blog.csdnimg.cn/img_convert/0ae59e84d2358fc553fdedded717c342.png)
**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
8d1cf0df4f95710a1f 192.168.2.3:6380@16380 master - 0 1678679584000 4 connected 10923-16383
dee913166afa30b567b151e6e1196847ed0a8a96 192.168.2.2:6381@16381 slave b6f47e859ad6a3b9b238778d1cf0df4f95710a1f 0 1678679586000 4 connected
693d6d17f5860887d3343ebe0083351cd9815c8d 192.168.2.3:6381@16381 slave 9f48a4262474744dc22524b28096ccba111d236d 0 1678679586593 5 connected
### 最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
### 资料预览
给大家整理的视频资料:
[外链图片转存中...(img-uk61t846-1714579742060)]
给大家整理的电子书资料:
[外链图片转存中...(img-kW4ayM3r-1714579742060)]
**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**