Linux——redis主从复制、哨兵模式

news2024/9/22 23:36:35

一、redis 的安全加固:

  1. 对redis数据库访问的角度
    1. auth // 验证登录redis 数据库的用户
    2. acl // 设置redis用户的权限
    3. 将配置完成的ACL策略写入配置文件
      • config rewrite //目前redis生效的配置全部写入到默认配置文件的尾部
      • 写入到acl文件中,在加载配置文件时,找到acl文件  
        1. aclfile    配置选项在配置文件中启用
        2. acl save 将目前acl list 列出的权限规则写入acl文件
  2. redis 默认采用明文数据传输,数据传输的加密
    1. TLS
    2. 在配置文件中,指定加密证书以及秘钥即可
    3. 一般只需要配置服务端的证书和秘钥,也可以同时配置客户端的秘钥
    4. 加密通信配置参数
      • tls-port  在指定端口启用tls加密
      •  tls-cert-file redis.crt // 服务端证书
      •  tls-key-file redis.key // 服务端秘钥
      •  tls-key-file-pass secret // 秘钥访问密码
      •  tls-client-cert-file client.crt // 客户端证书
      •  tls-client-key-file client.key // 客户端秘钥
      •  tls-client-key-file-pass secret // 客户端秘钥访问密码

二、redis的水平扩展

在进行水平扩展时,容易遇到以下问题:

  1. 数据不一致 // 主从复制
  2. 自动的故障转移 // sential哨兵模式   redis 自带集群功能
  3. 持续监控redis实例集群
  4. 异常信息的通知 // sential 哨兵模式
  5. 水平扩展的操作复杂度
    1. 通过redis本身特性配置完成,因此操作相对而言比较简单
    2. 在redis集群模式下,增加新的节点也是非常容易

三、主从复制

redis从节点完全复制主节点的数据,从而成为主节点的数据备份,因此可以在主节点出现故障的情况下,接替主节点功能。

redis的主从复制在数据同步方面默认采用异步策略,采用异步数据来保证数据同步的低延迟高性能。

redis主从复制过程:

  1. 主从复制建立之后,首先从节点将请求一次全量复制,获取主节点中保存的所有数据;
  2. 在主从通信良好的情况下,主节点的redis 实例将持续向redis从节点,发送任何导致主节点数据集发生改变的语句,键删除与新建、redis过期的键、
  3. 在主从复制过程中,如果因为意外或者网络问题,导致主从之间的复制中断,那么从节点恢复与主节点通信后,会再次请求一次全量数据同步,由主节点发送全量数据集后,继续给从节点发送数据改动语句。

redis 主从复制注意事项:

  1. 主从复制采用异步同步
  2. 一个主节点可以有多个从节点
  3. 从节点也可以成为别的从节点的主节点,从而形成一个树状结构
  4. 主从同步不会阻塞主节点的任何正常操作,因为主节点性能表现几乎不受主从复制的影响
  5. 使用从节点来实现redis集群的水平扩展,保证数据安全和高可用
  6. 因为使用从节点作为主节点数据备份,那么主节点可以不用考虑数据持久化配置的 ,可以在从节点上配置rdb或者AOF持久化,降低主节点和磁盘的交互,进一步提升主节点的运行效率
  7. 主从的故障转移,需要结合哨兵机制

主从复制建立之后,从节点一般默认处于只读状态,只读状态修改配置的方式修改。

replica-read-only yes  // 从节点只读  no 从节点可写

四、配置过程:

注意实验环境下防火墙和selinux 均关闭

打开一个新的虚拟机

[root@redis-replica ~]# dnf -y install redis

[root@redis-replica ~]# vim /etc/redis/redis.conf

[root@redis-replica ~]# systemctl restart redis
[root@redis-replica ~]# ss -anput | grep 6379 
tcp   LISTEN    0      511           192.168.110.137:6379          0.0.0.0:*    users:(("redis-server",pid=33967,fd=6))  
tcp   ESTAB     0      0             192.168.110.137:43791 192.168.110.133:6379 users:(("redis-server",pid=33967,fd=7))  

[root@redis-replica ~]# redis-cli -h 192.168.110.137
192.168.110.137:6379> keys *
 1) "sset1"
 2) "bike:1"
 3) "newke"
 4) "bike2"
 5) "site1"
 6) "alice"
 7) "set2"
 8) "eee"
 9) "a_kay"
10) "bike:3"
11) "bike1"
12) "bike:2"
13) "c_key"
14) "queue2"
15) "game_event"
16) "counter"
17) "b_ksy"
18) "bike"
19) "set1"
20) "newqueue"

主节点:
127.0.0.1:6379> LPOP newqueue 
"user1"
127.0.0.1:6379> LRANGE newqueue 0 -1
(empty array)

从节点验证:
192.168.110.137:6379> LRANGE newqueue 0 -1
(empty array)

主节点:
127.0.0.1:6379> lpush newqueue newitem item2 item3
(integer) 3
127.0.0.1:6379> LRANGE newqueue 0 -1
1) "item3"
2) "item2"
3) "newitem"

从节点验证:
192.168.110.137:6379> LRANGE newqueue 0 -1
1) "item3"
2) "item2"
3) "newitem"
192.168.110.137:6379> exit

从节点只读:
192.168.110.137:6379> set a b 
(error) READONLY You can't write against a read only replica.
192.168.110.137:6379> config get replica-read-only 
1) "replica-read-only"
2) "yes"
192.168.110.137:6379> CONFIG SET replica-read-only no 
OK
192.168.110.137:6379> set a b 
OK
192.168.110.137:6379> get a 
"b"
192.168.110.137:6379> CONFIG SET replica-read-only yes
OK

集群模式:

redis的集群提供了一种将数据分散到不同节点进行保存的数据,在保存数据的节点中,又可以设置主从复制,所以保存数据的节点down之后,从节点可以自动接替主节点,无需手工干预。redis集群具有很高的抗风险能力,扩展节点的配置也非常的简单。

redis集群模式之下,不同的redis实例不考虑数据同步,每一个集群内的工作节点上都保存不同的数据,通过hash一致性算法确定每一个键的保存位置。redis集群模式具备以下特性:

  1. 数据将分散到不同的节点中
  2. redis集群内部部分节点down 不会导致集群down,只有集群中大部分节点down的情况下,集群才会down。
  3. redis集群可以实现故障的自动转移

主从模式下主从节点数据完全一致,结合上图架构可以理解为同一个数据同时保存在主从节点上。

redis集群模式如何分散数据?

集群中进行数据存储时,结合hash slot完成数据存储。简单理解:一个redis集群中一共有 16384 个hash slot,当需要进行数据存储时,给新建的键分配一个新的 hash slot , 一个hash slot 对应一组键值对。这些hash slot皆可以分配给不同的节点,每个节点保存对应hash slot 的键值对。

redis 集群模式之下,做好下面两点就可以保证redis集群的可用性和完整性。

  1. 确保集群中每一个主节点有自己的从节点,同时从节点也需要在集群内
  2. 保证每一个主节点都分配了合理数量的hash slot

redis 的集群端口一般是 数据端口 + 10000

数据端口:6379   集群端口 16379

[root@redis-master ~]# systemctl stop redis.service 
[root@redis-master ~]# 
[root@redis-master ~]# mkdir /redis-cluster/700{0..5} -p 
[root@redis-master ~]# ls /redis-cluster/
7000  7001  7002  7003  7004  7005
[root@redis-master ~]# cd /redis-cluster/700
-bash: cd: /redis-cluster/700: No such file or directory
[root@redis-master ~]# cd /redis-cluster/7000
[root@redis-master 7000]# vim redis.conf
[root@redis-master 7000]# vim /etc/redis/redis.conf 
[root@redis-master 7000]# vim redis.conf 
[root@redis-master 7000]# cp redis.conf ../7001/
[root@redis-master 7000]# cp redis.conf ../7002/
[root@redis-master 7000]# cp redis.conf ../7003/
[root@redis-master 7000]# cp redis.conf ../7004/
[root@redis-master 7000]# cp redis.conf ../7005/
[root@redis-master 7000]# sed -i "s/7000/7001/g" /redis-cluster/7001/redis.conf 
[root@redis-master 7000]# cat /redis-cluster/7001/redis.conf 
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
logfile /redis-cluster/7001/redis-7001.log
[root@redis-master 7000]# sed -i "s/7000/7002/g" /redis-cluster/7002/redis.conf 
[root@redis-master 7000]# sed -i "s/7000/7003/g" /redis-cluster/7003/redis.conf 
[root@redis-master 7000]# sed -i "s/7000/7004/g" /redis-cluster/7004/redis.conf 
[root@redis-master 7000]# sed -i "s/7000/7005/g" /redis-cluster/7005/redis.conf 
[root@redis-master 7000]# chown -R redis  /redis-cluster/
[root@redis-master 7000]# vim /etc/redis/redis.conf 
[root@redis-master 7000]# vim redis.conf 
[root@redis-master 7000]# echo "daemonize yes" >> redis.conf 
[root@redis-master 7000]# echo "pidfile /redis-cluster/7000/7000.pid" >> redis.conf 
[root@redis-master 7000]# echo "daemonize yes" >> ../7001/redis.conf 
[root@redis-master 7000]# echo "pidfile /redis-cluster/7001/7001.pid" >> ../7001/redis.conf 
[root@redis-master 7000]# echo "daemonize yes" >> ../7002/redis.conf 
[root@redis-master 7000]# echo "pidfile /redis-cluster/7002/7002.pid" >> ../7002/redis.conf 
[root@redis-master 7000]# echo "pidfile /redis-cluster/7003/7003.pid" >> ../7003/redis.conf 
[root@redis-master 7000]# echo "daemonize yes" >> ../7003/redis.conf 
[root@redis-master 7000]# echo "daemonize yes" >> ../7004/redis.conf 
[root@redis-master 7000]# echo "daemonize yes" >> ../7005/redis.conf 
[root@redis-master 7000]# echo "pidfile /redis-cluster/7004/7004.pid" >> ../7004/redis.conf 
[root@redis-master 7000]# echo "pidfile /redis-cluster/7005/7005.pid" >> ../7005/redis.conf 
[root@redis-master 7000]# redis-server ./redis.conf 
[root@redis-master 7000]# ss -anput | grep 7000
tcp   LISTEN 0      511                   0.0.0.0:17000         0.0.0.0:*    users:(("redis-server",pid=3617,fd=10))                                           
tcp   LISTEN 0      511                   0.0.0.0:7000          0.0.0.0:*    users:(("redis-server",pid=3617,fd=6))                                            
tcp   LISTEN 0      511                      [::]:17000            [::]:*    users:(("redis-server",pid=3617,fd=11))                                           
tcp   LISTEN 0      511                      [::]:7000             [::]:*    users:(("redis-server",pid=3617,fd=7))                                            
[root@redis-master 7000]# cd ../7001/
[root@redis-master 7001]# redis-server ./redis.conf 
[root@redis-master 7001]# ss -anput | grep 7001
tcp   LISTEN 0      511                   0.0.0.0:17001         0.0.0.0:*    users:(("redis-server",pid=3642,fd=10))                                           
tcp   LISTEN 0      511                   0.0.0.0:7001          0.0.0.0:*    users:(("redis-server",pid=3642,fd=6))                                            
tcp   LISTEN 0      511                      [::]:17001            [::]:*    users:(("redis-server",pid=3642,fd=11))                                           
tcp   LISTEN 0      511                      [::]:7001             [::]:*    users:(("redis-server",pid=3642,fd=7))                                            
[root@redis-master 7001]# cd ../7002
[root@redis-master 7002]# redis-server ./redis.conf 
[root@redis-master 7002]# ss -anput | grep 7002
tcp   LISTEN 0      511                   0.0.0.0:17002         0.0.0.0:*    users:(("redis-server",pid=3651,fd=10))                                           
tcp   LISTEN 0      511                   0.0.0.0:7002          0.0.0.0:*    users:(("redis-server",pid=3651,fd=6))                                            
tcp   LISTEN 0      511                      [::]:17002            [::]:*    users:(("redis-server",pid=3651,fd=11))                                           
tcp   LISTEN 0      511                      [::]:7002             [::]:*    users:(("redis-server",pid=3651,fd=7))                                            
[root@redis-master 7002]# cd ../7003
[root@redis-master 7003]# redis-server ./redis.conf 
[root@redis-master 7003]# ss -anput | grep 7003
tcp   LISTEN 0      511                   0.0.0.0:17003         0.0.0.0:*    users:(("redis-server",pid=3660,fd=10))                                           
tcp   LISTEN 0      511                   0.0.0.0:7003          0.0.0.0:*    users:(("redis-server",pid=3660,fd=6))                                            
tcp   LISTEN 0      511                      [::]:17003            [::]:*    users:(("redis-server",pid=3660,fd=11))                                           
tcp   LISTEN 0      511                      [::]:7003             [::]:*    users:(("redis-server",pid=3660,fd=7))                                            
[root@redis-master 7003]# cd ../7004
[root@redis-master 7004]# redis-server ./redis.conf 
[root@redis-master 7004]# ss -anput | grep 7004
tcp   LISTEN 0      511                   0.0.0.0:17004         0.0.0.0:*    users:(("redis-server",pid=3670,fd=10))                                           
tcp   LISTEN 0      511                   0.0.0.0:7004          0.0.0.0:*    users:(("redis-server",pid=3670,fd=6))                                            
tcp   LISTEN 0      511                      [::]:17004            [::]:*    users:(("redis-server",pid=3670,fd=11))                                           
tcp   LISTEN 0      511                      [::]:7004             [::]:*    users:(("redis-server",pid=3670,fd=7))                                            
[root@redis-master 7004]# cd ../7005
[root@redis-master 7005]# redis-server ./redis.conf 
[root@redis-master 7005]# ss -anput | grep 7005
tcp   LISTEN 0      511                   0.0.0.0:17005         0.0.0.0:*    users:(("redis-server",pid=3678,fd=10))                                           
tcp   LISTEN 0      511                   0.0.0.0:7005          0.0.0.0:*    users:(("redis-server",pid=3678,fd=6))                                            
tcp   LISTEN 0      511                      [::]:17005            [::]:*    users:(("redis-server",pid=3678,fd=11))                                           
tcp   LISTEN 0      511                      [::]:7005             [::]:*    users:(("redis-server",pid=3678,fd=7))                                            
[root@redis-master 7005]# ls 
7005.pid  appendonly.aof  nodes.conf  redis-7005.log  redis.conf
[root@redis-master 7005]# cat nodes.conf 
015b10e7a627b8f0326d00f8225370734ce3d07c :0@0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
[root@redis-master 7005]# redis-c
redis-check-aof  redis-check-rdb  redis-cli        
[root@redis-master 7005]# redis-cli --cluster create 127.0.0.1:7000 \
> 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
> --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:7004 to 127.0.0.1:7000
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7003 to 127.0.0.1:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: f145e0a3b35c40faafad2b1c8884091394903d7d 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
M: 963bb6b558d56ac90cecf7ae979eebe9d1bc0058 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
M: caa5055128fb506f175c26bc2467eda55c4c9665 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
S: c211b4e3c423331ab4f9d9237c1c4522fd977608 127.0.0.1:7003
   replicates f145e0a3b35c40faafad2b1c8884091394903d7d
S: f59c330f1edc2aeea17ba37abecc813e3e6b3554 127.0.0.1:7004
   replicates 963bb6b558d56ac90cecf7ae979eebe9d1bc0058
S: 015b10e7a627b8f0326d00f8225370734ce3d07c 127.0.0.1:7005
   replicates caa5055128fb506f175c26bc2467eda55c4c9665
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: f145e0a3b35c40faafad2b1c8884091394903d7d 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 963bb6b558d56ac90cecf7ae979eebe9d1bc0058 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 015b10e7a627b8f0326d00f8225370734ce3d07c 127.0.0.1:7005
   slots: (0 slots) slave
   replicates caa5055128fb506f175c26bc2467eda55c4c9665
S: c211b4e3c423331ab4f9d9237c1c4522fd977608 127.0.0.1:7003
   slots: (0 slots) slave
   replicates f145e0a3b35c40faafad2b1c8884091394903d7d
M: caa5055128fb506f175c26bc2467eda55c4c9665 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: f59c330f1edc2aeea17ba37abecc813e3e6b3554 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 963bb6b558d56ac90cecf7ae979eebe9d1bc0058
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@redis-master 7005]# cat nodes.conf 
c211b4e3c423331ab4f9d9237c1c4522fd977608 127.0.0.1:7003@17003 slave f145e0a3b35c40faafad2b1c8884091394903d7d 0 1725507593185 1 connected
f145e0a3b35c40faafad2b1c8884091394903d7d 127.0.0.1:7000@17000 master - 1725507595507 1725507592989 1 connected 0-5460
f59c330f1edc2aeea17ba37abecc813e3e6b3554 127.0.0.1:7004@17004 slave 963bb6b558d56ac90cecf7ae979eebe9d1bc0058 0 1725507595004 2 connected
963bb6b558d56ac90cecf7ae979eebe9d1bc0058 127.0.0.1:7001@17001 master - 0 1725507593992 2 connected 5461-10922
015b10e7a627b8f0326d00f8225370734ce3d07c 127.0.0.1:7005@17005 myself,slave caa5055128fb506f175c26bc2467eda55c4c9665 0 1725507593000 3 connected
caa5055128fb506f175c26bc2467eda55c4c9665 127.0.0.1:7002@17002 master - 0 1725507594000 3 connected 10923-16383
vars currentEpoch 6 lastVoteEpoch 0
[root@redis-master 7005]# redis-cli -p 7000 -c 
127.0.0.1:7000> set testa testtest
OK
127.0.0.1:7000> get testa
"testtest"
127.0.0.1:7000> exit
[root@redis-master 7005]# redis-cli -p 7001 -c 
127.0.0.1:7001> get testa
-> Redirected to slot [2133] located at 127.0.0.1:7000
"testtest"
127.0.0.1:7000> exit
[root@redis-master 7005]# cat nodes.conf 
c211b4e3c423331ab4f9d9237c1c4522fd977608 127.0.0.1:7003@17003 slave f145e0a3b35c40faafad2b1c8884091394903d7d 0 1725507593185 1 connected
f145e0a3b35c40faafad2b1c8884091394903d7d 127.0.0.1:7000@17000 master - 1725507595507 1725507592989 1 connected 0-5460
f59c330f1edc2aeea17ba37abecc813e3e6b3554 127.0.0.1:7004@17004 slave 963bb6b558d56ac90cecf7ae979eebe9d1bc0058 0 1725507595004 2 connected
963bb6b558d56ac90cecf7ae979eebe9d1bc0058 127.0.0.1:7001@17001 master - 0 1725507593992 2 connected 5461-10922
015b10e7a627b8f0326d00f8225370734ce3d07c 127.0.0.1:7005@17005 myself,slave caa5055128fb506f175c26bc2467eda55c4c9665 0 1725507593000 3 connected
caa5055128fb506f175c26bc2467eda55c4c9665 127.0.0.1:7002@17002 master - 0 1725507594000 3 connected 10923-16383
vars currentEpoch 6 lastVoteEpoch 0

## 模拟7000端口redis 实例宕机

[root@redis-master 7005]# cd ../7000
[root@redis-master 7000]# cat 7000.pid 
3617
[root@redis-master 7000]# kill -9 3617
[root@redis-master 7000]# cd -
/redis-cluster/7005
[root@redis-master 7005]# cat nodes.conf 
c211b4e3c423331ab4f9d9237c1c4522fd977608 127.0.0.1:7003@17003 master - 0 1725507903053 7 connected 0-5460
f145e0a3b35c40faafad2b1c8884091394903d7d 127.0.0.1:7000@17000 master,fail - 1725507898600 1725507896000 1 disconnected
f59c330f1edc2aeea17ba37abecc813e3e6b3554 127.0.0.1:7004@17004 slave 963bb6b558d56ac90cecf7ae979eebe9d1bc0058 0 1725507903766 2 connected
963bb6b558d56ac90cecf7ae979eebe9d1bc0058 127.0.0.1:7001@17001 master - 0 1725507902751 2 connected 5461-10922
015b10e7a627b8f0326d00f8225370734ce3d07c 127.0.0.1:7005@17005 myself,slave caa5055128fb506f175c26bc2467eda55c4c9665 0 1725507904000 3 connected
caa5055128fb506f175c26bc2467eda55c4c9665 127.0.0.1:7002@17002 master - 0 1725507903000 3 connected 10923-16383
vars currentEpoch 7 lastVoteEpoch 0

[root@redis-master 7005]# redis-cli -p 7002 -c 
127.0.0.1:7002> keys *
(empty array)
127.0.0.1:7002> get testa 
-> Redirected to slot [2133] located at 127.0.0.1:7003
"testtest"
127.0.0.1:7003> exit
[root@redis-master 7005]# cd -
/redis-cluster/7000
[root@redis-master 7000]# pwd 
/redis-cluster/7000
[root@redis-master 7000]# redis-server ./redis.conf 
[root@redis-master 7000]# cat nodes.conf 
963bb6b558d56ac90cecf7ae979eebe9d1bc0058 127.0.0.1:7001@17001 master - 0 1725508058257 2 connected 5461-10922
c211b4e3c423331ab4f9d9237c1c4522fd977608 127.0.0.1:7003@17003 master - 0 1725508058257 7 connected 0-5460
f145e0a3b35c40faafad2b1c8884091394903d7d 127.0.0.1:7000@17000 myself,slave c211b4e3c423331ab4f9d9237c1c4522fd977608 0 1725508058253 7 connected
f59c330f1edc2aeea17ba37abecc813e3e6b3554 127.0.0.1:7004@17004 slave 963bb6b558d56ac90cecf7ae979eebe9d1bc0058 0 1725508058257 2 connected
015b10e7a627b8f0326d00f8225370734ce3d07c 127.0.0.1:7005@17005 slave caa5055128fb506f175c26bc2467eda55c4c9665 0 1725508058257 3 connected
caa5055128fb506f175c26bc2467eda55c4c9665 127.0.0.1:7002@17002 master - 0 1725508058257 3 connected 10923-16383
vars currentEpoch 7 lastVoteEpoch 0
[root@redis-master 7000]# cat nodes.conf 
963bb6b558d56ac90cecf7ae979eebe9d1bc0058 127.0.0.1:7001@17001 master - 0 1725508058257 2 connected 5461-10922
c211b4e3c423331ab4f9d9237c1c4522fd977608 127.0.0.1:7003@17003 master - 0 1725508058257 7 connected 0-5460
f145e0a3b35c40faafad2b1c8884091394903d7d 127.0.0.1:7000@17000 myself,slave c211b4e3c423331ab4f9d9237c1c4522fd977608 0 1725508058253 7 connected
f59c330f1edc2aeea17ba37abecc813e3e6b3554 127.0.0.1:7004@17004 slave 963bb6b558d56ac90cecf7ae979eebe9d1bc0058 0 1725508058257 2 connected
015b10e7a627b8f0326d00f8225370734ce3d07c 127.0.0.1:7005@17005 slave caa5055128fb506f175c26bc2467eda55c4c9665 0 1725508058257 3 connected
caa5055128fb506f175c26bc2467eda55c4c9665 127.0.0.1:7002@17002 master - 0 1725508058257 3 connected 10923-16383
vars currentEpoch 7 lastVoteEpoch 0
[root@redis-master 7000]# 000 m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2111115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《论软件设计模式及其应用》通关范文,软考高级系统架构设计师

论文真题 设计模式(Design Pattern)是一套被反复使用的代码设计经验总结,代表了软件开发人员在软件开发过程中面临的一般问题的解决方案和最佳实践。使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性。现有的设计模式已经在前人的系统中…

每日一练:和为K的子数组

一、题目要求 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入:n…

python深度学习:从注意力机制到生成模型,全面解析现代AI技术

近年来,伴随着以卷积神经网络(CNN)为代表的深度学习的快速发展,人工智能迈入了第三次发展浪潮,AI技术在各个领域中的应用越来越广泛。注意力机制、Transformer模型(BERT、GPT-1/2/3/3.5/4、DETR、ViT、Swin…

OpenCV结构分析与形状描述符(10)检测并提取轮廓函数findContours()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在二值图像中查找轮廓。 该函数使用算法 253从二值图像中检索轮廓。轮廓是有用的工具,可用于形状分析和对象检测与识别。参见 OpenC…

SDN架构详解

目录 1)经典的IP网络-分布式网络 2)经典网络面临的问题 3)SDN起源 4)OpenFlow基本概念 5)Flow Table简介 6)SDN的网络架构 7)华为SDN网络架构 8)传统网络 vs SDN 9&#xf…

网络安全与恶意攻击:如何应对?

引言 随着技术的发展,我们的生活越来越依赖于网络。但是,这也暴露了我们的系统对各种网络威胁的脆弱性。无论是个人还是企业,网络安全都成为了我们不能忽视的话题。 网络威胁的类型 网络威胁主要有以下几种: 网络钓鱼攻击&#…

linux学习--第四天

--linux文件操作 文件IO操作包括: (注:I:input(输入)O:output(输出)) open:打开 close:关闭 read:读取 write:…

c++一个数因子和(快速求解)

void 一个数因子和(int 整数) {//缘由https://ask.csdn.net/questions/1054457#answer_1251715int he 0, j 0; string a "";while (j < 整数)if (!(整数%j))he j, a to_string(j) "";cout << a << "的因子和&#xff1a;" …

如何在 Java 应用程序中定位高 CPU 使用率问题

文章目录 ♨ 前言♨ 提前准备♨ 线上定位♨ 结语 ♨ 前言 在运行 Java 应用程序的服务器上&#xff0c;高 CPU 使用率可能会影响应用程序的性能和稳定性。本文将介绍如何通过一系列步骤和工具来准确诊断和解决高 CPU 使用率问题&#xff0c;特别是针对 Java 环境下的应用程序。…

OpenCV影像数据处理入门-学习篇

目录 简介如何安装图像数据处理简单操作视频数据处理简单操作 一、简介 在计算机视觉项目的开发中&#xff0c;OpenCV作为最大众的开源库&#xff0c;拥有了丰富的常用图像处理函数库&#xff0c;可用于开发实时的图像处理、计算机视觉以及模式识别程序。采用C/C语言编写&am…

用于辅助视障人士检测人行道障碍物的 TinyML 模型

这篇论文的标题为《A TinyML model for sidewalk obstacle detection: aiding the blind and visually impaired people》&#xff0c;发表在《Multimedia Tools and Applications》上。以下是论文的主要内容概述&#xff1a; 摘要&#xff1a; 论文介绍了在资源受限的物联网…

C语言程序设计 笔记代码梳理 重制版

前言 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute) 2.C语言编写代码到运行 都是先编译&#xff0c;后链接&#xff0c;最后运行。&#xff08;.c ---> .obj --->.exe&#xff09;这个过…

热老化的行业应用

热老化应用行业&#xff1a;深度解析与图像呈现 热老化&#xff0c;作为一种重要的材料测试方法&#xff0c;在众多行业中扮演着关键角色。它通过模拟产品在高温环境下的长期使用&#xff0c;提前发现潜在的材料缺陷、性能衰退等问题&#xff0c;从而提高产品的可靠性&#xf…

打造个性化时装购物平台:Spring Boot框架的实践

第1章 绪论 1.1背景及意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对时装购物系统方面的要求也在不断提高&#xff0c;喜欢购物的人数更是不断增加&#xff0c;使得时装购物系统的开发成为必需而且紧迫的…

顶刊精析|METI:整合细胞形态与空间转录组学的肿瘤微环境分析框架·24-09-06

小罗碎碎念 本期精读文献&#xff1a;《METI: Deep profiling of tumor ecosystems by integrating cell morphology and spatial transcriptomics》 今天分享的这篇文献于2023年8月25日发表在Nat Commun&#xff0c;目前IF14.7。 作者类型作者姓名单位名称&#xff08;中文&am…

【免费分享】25秋招提前批25秋招信息表

秋招&#xff0c;即秋季校园招聘&#xff0c;通常是指每年秋季&#xff08;大约从9月到11月&#xff09;企业在各大高校举办的招聘活动。这是许多公司为了吸引优秀应届毕业生而进行的招聘活动&#xff0c;也是许多学生毕业后进入职场的重要途径。以下是秋招的一些关键点&#x…

手机TF卡格式化后数据恢复:方法、挑战与预防措施

在现代生活中&#xff0c;‌手机已经成为我们不可或缺的一部分&#xff0c;‌而TF卡&#xff08;‌即MicroSD卡&#xff09;‌作为手机存储的扩展&#xff0c;‌更是承载了我们大量的重要数据。‌然而&#xff0c;‌不慎的格式化操作往往导致数据丢失&#xff0c;‌给用户带来不…

集成电路学习:什么是RAM随机存取存储器

RAM&#xff1a;随机存取存储器 RAM&#xff08;Random Access Memory&#xff0c;随机存取存储器&#xff09;是计算机中用于临时存储数据和程序指令的重要存储设备。以下是关于RAM的详细解析&#xff1a; 一、RAM的定义与功能 RAM是一种内部存储器&#xff0c;与CPU直接交换…

(pycharm)安装python库函数Matplotlib步骤

1.在pycharm下面找到terminal&#xff0c;双击输入pip install Matplotlib&#xff0c;进行Matplotlib库函数的安装。 现在&#xff0c;当你运行pip --version或python.exe -m pip --version时&#xff0c;你应该会看到pip的版本已经更新为24.2。

mhtml图片提取 百度图片下载

如果你需要找一些图片&#xff0c;可以先去百度一下&#xff0c;待相关网页加载完成后&#xff0c;点击保存&#xff0c;即可得到一个mhtml文件。这个文件里的图片会用base64进行存储&#xff0c;只需要找到他们并转化就可以。目前在美篇之类的网站上效果还一般&#xff0c;需要…