ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis-cluster集群安装

2021-12-16 21:00:56  阅读:182  来源: 互联网

标签:redis 192.168 cluster connected 7001 集群 1.251


Redis-cluster集群

概念

Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

redis-cluster

结构特点

  1. 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
  2. 节点的fail是通过集群中超过半数的节点检测失效时才生效。
  3. 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
  4. redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
  5. Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

cluster节点分配

现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:

  • 节点A覆盖0-5460;

  • 节点B覆盖5461-10922;

  • 节点C覆盖10923-16383.

获取数据

如果存入一个值,按照redis cluster哈希槽的算法: CRC16(‘key’)384 = 6782。 那么就会把这个key 的存储分配到 B 上了。同样,当我连接(A,B,C)任何一个节点想获取’key’这个key时,也会这样的算法,然后内部跳转到B节点上获取数据

以上参考

怎样投票

投票过程是集群中所有master参与,如果半数以上master节点与当前master节点通信超过cluster-node-timeout设置的时间,认为当前master节点挂掉。

如果其中一个节点的master挂了,它的slave就会替换之前master的位置成为新的master,之前的恢复后就会变成slave。

怎样判定节点不可用

  1. 如果集群任意master挂掉,且当前master没有slave(副本).集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态。
  2. 如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态,当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误。

总结

简单的理解一下,redis-cluster集群是将主从模式和Sentinel模式的整合实现。

集群搭建

环境准备

主机ip端口
192.168.1.2517001,7002
192.168.1.2527001,7002
192.168.1.2537001,7002

安装redis

从官网下载redis的tar包,并解压安装

# 解压
tar -zxvf redis-5.0.14.tar.gz
# 进入文件夹
cd redis-5.0.14
# 编译
make
# 安装
make install

测试启动

redis-server redis.conf

image-20211216172334132

修改配置文件

mkdir /usr/local/redis-5.0.14/cluster

cp /usr/local/redis-5.0.14/redis.conf /usr/local/redis-5.0.14/cluster/redis_7001.conf

cp /usr/local/redis-5.0.14/redis.conf /usr/local/redis-5.0.14/cluster/redis_7002.conf

chown -R 777 /usr/local/redis-5.0.14

mkdir -p /data1/redis/cluster/{redis_7001,redis_7002} && chown -R 777 /data1/redis

redis_7001.conf

# vim /usr/local/redis-5.0.14/cluster/redis_7001.conf

bind 192.168.1.251
port 7001
daemonize yes
pidfile "/var/run/redis_7001.pid"
logfile "/usr/local/redis-5.0.14/cluster/redis_7001.log"
dir "/data1/redis/cluster/redis_7001"
masterauth 123456
requirepass 123456
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 15000

redis_7002.conf

# vim /usr/local/redis-5.0.14/cluster/redis_7002.conf

bind 192.168.1.251
port 7002
daemonize yes
pidfile "/var/run/redis_7002.pid"
logfile "/usr/local/redis-5.0.14/cluster/redis_7002.log"
dir "/data1/redis/cluster/redis_7002"
masterauth "123456"
requirepass "123456"
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7002.conf
cluster-node-timeout 15000

其他机器配置一致

启动redis服务

redis-server /usr/local/redis-5.0.14/cluster/redis_7001.conf

tail -f /usr/local/redis-5.0.14/cluster/redis_7001.log

redis-server /usr/local/redis-5.0.14/cluster/redis_7002.conf

tail -f /usr/local/redis-5.0.14/cluster/redis_7002.log

创建集群

如果redis版本比较低,则需要安装ruby。任选一台机器安装ruby即可

在redis-5中redis-trib.rb的功能被集成到了redis-cli中,大大简化了redis的集群部署,加快了进群部署的速度,也方便后期维护与扩容。

redis-cli -a 123456 --cluster create 192.168.1.251:7001 192.168.1.251:7002 192.168.1.252:7001 192.168.1.252:7002 192.168.1.253:7001 192.168.1.253:7002 --cluster-replicas 1

启动成功后结果如下:

image-20211216185204745

从上可知:

192.168.1.251:7001  master   它的slave为 192.168.1.252:7002
192.168.1.252:7001  master   它的slave为 192.168.1.253:7002
192.168.1.253:7001  master   它的slave为 192.168.1.251:7002

集群操作

登陆集群

 # -c,使用集群方式登录
redis-cli -c -h 192.168.1.251 -p 7001 -a 123456        

查看集群信息

# 集群状态
192.168.1.251:7001> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:526
cluster_stats_messages_pong_sent:541
cluster_stats_messages_sent:1067
cluster_stats_messages_ping_received:536
cluster_stats_messages_pong_received:526
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:1067

列出节点信息

# 列出节点信息
192.168.1.251:7001> CLUSTER NODES
e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639652443264 3 connected 5461-10922
5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639652444267 5 connected 10923-16383
63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639652442000 4 connected
2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639652441257 6 connected
e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 myself,master - 0 1639652442000 1 connected 0-5460
cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639652442259 5 connected

测试数据读写

192.168.1.252:7001> set key1 one
OK

192.168.1.252:7001> set key2 211
-> Redirected to slot [4998] located at 192.168.1.251:7001
OK

192.168.1.253:7001> get key1
-> Redirected to slot [9189] located at 192.168.1.252:7001
"one"

192.168.1.252:7001> get key2
-> Redirected to slot [4998] located at 192.168.1.251:7001
"211"

可以看出redis cluster集群是去中心化的,每个节点都是平等的,连接哪个节点都可以获取和设置数据。

slave节点根本不提供服务,只是作为对应master节点的一个备份。

增加节点

在192.168.1.251上增加1个节点7003

# vim /usr/local/redis-5.0.14/cluster/redis_7003.conf

bind 192.168.1.251
port 7003
daemonize yes
pidfile "/var/run/redis_7003.pid"
logfile "/usr/local/redis-5.0.14/cluster/redis_7003.log"
dir "/data1/redis/cluster/redis_7003"
masterauth "123456"
requirepass "123456"
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7003.conf
cluster-node-timeout 15000

# mkdir /data1/redis/cluster/redis_7003

# redis-server /usr/local/redis-5.0.14/cluster/redis_7003.conf 

在192.168.1.252上增加1个节点7003

# vim /usr/local/redis-5.0.14/cluster/redis_7003.conf

bind 192.168.1.252
port 7003
daemonize yes
pidfile "/var/run/redis_7003.pid"
logfile "/usr/local/redis-5.0.14/cluster/redis_7003.log"
dir "/data1/redis/cluster/redis_7003"
masterauth "123456"
requirepass "123456"
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7003.conf
cluster-node-timeout 15000

# mkdir /data1/redis/cluster/redis_7003

# redis-server /usr/local/redis-5.0.14/cluster/redis_7003.conf 

集群中增加节点:

192.168.1.251:7001> CLUSTER MEET 192.168.1.251 7003
OK
192.168.1.251:7001> CLUSTER NODES
e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639653625000 3 connected 5461-10922
5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639653628000 5 connected 10923-16383
63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639653627000 4 connected
2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639653629480 6 connected
e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 myself,master - 0 1639653626000 1 connected 0-5460
20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master - 0 1639653629000 0 connected
cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639653628000 5 connected
192.168.1.251:7001> CLUSTER MEET 192.168.1.252 7003
OK
192.168.1.251:7001> CLUSTER NODES
e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639653675000 3 connected 5461-10922
16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 master - 0 1639653677000 7 connected
5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639653677000 5 connected 10923-16383
63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639653677000 4 connected
2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639653678644 6 connected
e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 myself,master - 0 1639653675000 1 connected 0-5460
20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master - 0 1639653677640 0 connected
cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639653678000 5 connected

新增的节点都是以master身份加入集群的

更换节点身份

将新增的192.168.1.252:7003节点身份改为192.168.1.251:7003的slave

redis-cli -c -h 192.168.1.252 -p 7003 -a 123456 cluster replicate 20f69b6053f05aec6b3a4e006115b19752c41a78
# 查看集群状态
192.168.1.251:7001> CLUSTER NODES
e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639654051000 3 connected 5461-10922
16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 slave 20f69b6053f05aec6b3a4e006115b19752c41a78 0 1639654054906 7 connected
5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639654053000 5 connected 10923-16383
63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639654051000 4 connected
2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639654052898 6 connected
e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 myself,master - 0 1639654052000 1 connected 0-5460
20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master - 0 1639654053901 0 connected
cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639654052000 5 connected
192.168.1.251:7001> 

查看相应的nodes.conf文件,可以发现有更改,它记录当前集群的节点信息

# cat /data1/redis/cluster/redis_7001/nodes_7001.conf
e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639653914000 1 connected 0-5460
63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639653913000 4 connected
2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639653913076 6 connected
16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 slave 20f69b6053f05aec6b3a4e006115b19752c41a78 0 1639653915080 7 connected
20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master - 0 1639653912000 0 connected
5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639653912073 5 connected 10923-16383
e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 myself,master - 0 1639653912000 3 connected 5461-10922
cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639653914078 5 connected
vars currentEpoch 7 lastVoteEpoch 0

重新分配hash槽

# 重新分配
# redis-cli -c -h 192.168.1.251 -p 7001  -a 123456  --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 192.168.1.251:7001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 192.168.1.251:7001)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Rebalancing across 4 nodes. Total weight = 4.00
Moving 1366 slots from 192.168.1.252:7001 to 192.168.1.251:7003
######################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
Moving 1365 slots from 192.168.1.253:7001 to 192.168.1.251:7003
#####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
Moving 1365 slots from 192.168.1.251:7001 to 192.168.1.251:7003
#####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
[root@node1 cluster]# 

模拟master节点挂掉

192.168.1.251

[root@node1 redis_7001]# netstat -lntp |grep 7003
tcp        0      0 192.168.1.251:7003      0.0.0.0:*               LISTEN      13662/redis-server  
tcp        0      0 192.168.1.251:17003     0.0.0.0:*               LISTEN      13662/redis-server  

# kill 13662

可以看到slave节点192.168.1.252:7003变成了master

192.168.1.252:7003> CLUSTER NODES
e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639656794000 3 connected 6827-10922
cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639656796000 5 connected
16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 myself,master - 0 1639656794000 9 connected 0-1364 5461-6826 10923-12287
63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639656796000 1 connected
2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639656795472 3 connected
e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639656797480 1 connected 1365-5460
5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639656796476 5 connected 12288-16383
20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 master,fail - 1639656777897 1639656775391 8 disconnected

现在测试重启刚刚挂掉的master节点

可以看到master节点恢复后变成了slave节点

192.168.1.252:7003> CLUSTER NODES
e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639657537000 3 connected 6827-10922
cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639657535264 5 connected
16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 myself,master - 0 1639657537000 9 connected 0-1364 5461-6826 10923-12287
63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639657537000 1 connected
2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639657539273 3 connected
e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639657538270 1 connected 1365-5460
5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639657537000 5 connected 12288-16383
20f69b6053f05aec6b3a4e006115b19752c41a78 192.168.1.251:7003@17003 slave 16cd75f2b35423220330eee59ec6958e0d802b8f 0 1639657537268 9 connected

删除节点

现在我将刚才添加的两个7003节点删除

先删除slave节点

# redis-cli -c -h 192.168.1.251 -p 7001  -a 123456 --cluster del-node 192.168.1.251:7003 20f69b6053f05aec6b3a4e006115b19752c41a78

192.168.1.252:7003> CLUSTER NODES
e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 master - 0 1639658067000 3 connected 6827-10922
cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639658065000 5 connected
16cd75f2b35423220330eee59ec6958e0d802b8f 192.168.1.252:7003@17003 myself,master - 0 1639658064000 9 connected 0-1364 5461-6826 10923-12287
63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639658066000 1 connected
2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639658062000 3 connected
e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639658066000 1 connected 1365-5460
5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639658067827 5 connected 12288-16383

清空master节点中的hash槽

将hash槽分配给其他的master节点

redis-cli -c -h 192.168.1.251 -p 7001  -a 123456 --cluster reshard 192.168.1.252:7003 --cluster-from 16cd75f2b35423220330eee59ec6958e0d802b8f --cluster-to e8ac4af0dd93b558260f1068b960d10df639ff5b --cluster-slots 1024 --cluster-yes

redis-cli -c -h 192.168.1.251 -p 7001  -a 123456 --cluster reshard 192.168.1.252:7003 --cluster-from 16cd75f2b35423220330eee59ec6958e0d802b8f --cluster-to e6db21fdc82d444e5958d446a66a9c76d0ea60cc --cluster-slots 1024 --cluster-yes

redis-cli -c -h 192.168.1.251 -p 7001  -a 123456 --cluster reshard 192.168.1.252:7003 --cluster-from 16cd75f2b35423220330eee59ec6958e0d802b8f --cluster-to 5d752d97d761a154989132841eabb1e12a46531f 

删除master节点

#redis-cli -c -h 192.168.1.251 -p 7001  -a 123456 --cluster del-node 192.168.1.252:7003 16cd75f2b35423220330eee59ec6958e0d802b8f 
 
 192.168.1.252:7001> CLUSTER NODES
e6db21fdc82d444e5958d446a66a9c76d0ea60cc 192.168.1.251:7001@17001 master - 0 1639658525000 11 connected 1024-6143
63821c34dc1da011cd018731688e85a508391bdc 192.168.1.252:7002@17002 slave e6db21fdc82d444e5958d446a66a9c76d0ea60cc 0 1639658525345 11 connected
2c763d241297ea8778f76d497632a9e8b7bf8e9b 192.168.1.253:7002@17002 slave e8ac4af0dd93b558260f1068b960d10df639ff5b 0 1639658524344 10 connected
5d752d97d761a154989132841eabb1e12a46531f 192.168.1.253:7001@17001 master - 0 1639658526348 12 connected 6144-6826 10923-16383
e8ac4af0dd93b558260f1068b960d10df639ff5b 192.168.1.252:7001@17001 myself,master - 0 1639658525000 10 connected 0-1023 6827-10922
cd785a8263f97b26e1437095726a514e7f69d616 192.168.1.251:7002@17002 slave 5d752d97d761a154989132841eabb1e12a46531f 0 1639658525000 12 connected

节点已经删除,并切已经停止了

标签:redis,192.168,cluster,connected,7001,集群,1.251
来源: https://blog.csdn.net/qq_36213352/article/details/121983657

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有