基于Redis6.2.6版本部署Redis Cluster集群的问题


Posted in Redis onApril 01, 2022

1.Redis6.2.6简介以及环境规划

在Redis6.x版本中主要增加了多线程的新特性,多线性对于高并发场景是非常有必要的。

Redis6.x新特性如下:

  • 多线程IO
  • 重新设计了客户端缓存功能
  • RESP3协议
  • 支持SSL
  • ACL权限控制
  • 提升了RDB日志加载速度
  • 发布官方的Redis集群代理模块 Redis Cluster proxy

Redis Cluster集群原理可以查看之前发布的文章。

环境规划:

IP 主机名 端口号 节点
192.168.20.10 redis-cluster 6701 master
192.168.20.10 redis-cluster 6702 slave—>6705的master
192.168.20.10 redis-cluster 6703 master
192.168.20.10 redis-cluster 6704 slave—>6701的master
192.168.20.10 redis-cluster 6705 master
192.168.20.10 redis-cluster 6706 slave—>6703的master

架构图:

Reids集群采用三主三从交叉复制架构,由于服务器数量有限,在一台机器中模拟出集群的效果,在实际生产环境中,需要准备三台机器,每台机器中分别部署两台Redis节点,一主一从,交叉备份。

基于Redis6.2.6版本部署Redis Cluster集群的问题

2.二进制安装Redis程序

2.1.二进制安装redis6.2.6

1.下载reids
[root@k8s-master1 /data/]# wget https://download.redis.io/releases/redis-6.2.6.tar.gz

2.解压并安装redis
[root@k8s-master1 /data/]# tar xf redis-6.2.6.tar.gz
[root@k8s-master1 /data/]# cd redis-6.2.6
[root@k8s-master1 /data/redis-6.2.6]# make

2.2.创建Reids Cluster集群目录

1.创建Redis Cluster各集群节点的配置文件存放路径
[root@k8s-master ~]# mkdir /data/redis-6.2.6-cluster/{bin,conf,data,var,logs} -p
[root@k8s-master ~]# ll /data/redis-6.2.6-cluster/
总用量 0
drwxr-xr-x 2 root root 6 3月  31 15:36 bin				#可执行文件
drwxr-xr-x 2 root root 6 3月  31 15:36 conf				#配置文件
drwxr-xr-x 2 root root 6 3月  31 15:36 data				#数据文件
drwxr-xr-x 2 root root 6 3月  31 15:36 log				#日志文件
drwxr-xr-x 2 root root 6 3月  31 15:36 var				#pid文件

2.准备redis可执行命令
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-benchmark /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-check-aof /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-check-rdb /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-cli /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-sentinel /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-server /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-trib.rb /data/redis-6.2.6-cluster/bin

3.配置Redis Cluster三主三从交叉复制集群

3.1.准备六个节点的redis配置文件

redis6.2.6版本配置文件所有内容如下,主要配置带注释的行。

bind 0.0.0.0
protected-mode no				#关闭保护模式
port 6701						#端口号
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes						#后台运行
pidfile /data/redis-6.2.6-cluster/var/redis_6701.pid				#pid存放
loglevel notice
logfile /data/redis-6.2.6-cluster/logs/redis_6701.log				#日志存放路径
databases 16
always-show-logo yes												#是否显示总日志
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename redis_6701.rdb												#持久化数据文件名称
rdb-del-sync-files no
dir /data/redis-6.2.6-cluster/data										#持久化数据文件存放路径
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled yes										#开启集群模式
cluster-config-file nodes_6701.conf						 #集群模式配置文件名称
cluster-node-timeout 15000								#集群超时时间
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes

1.复制二进制中的配置文件

[root@k8s-master redis-6.2.6]# cp redis.conf /data/redis-6.2.6-cluster/conf/

2.Reids 6701节点配置文件内容

[root@k8s-master conf]# vim redis_6701.conf
bind 0.0.0.0					#监听地址
protected-mode no				#关闭保护模式
port 6701						#端口号
daemonize yes						#后台运行
pidfile /data/redis-6.2.6-cluster/var/redis_6701.pid				#pid存放路径
logfile /data/redis-6.2.6-cluster/logs/redis_6701.log				#日志存放路径
always-show-logo yes											 #是否显示总日志
dbfilename redis_6701.rdb												#持久化数据文件名称
dir /data/redis-6.2.6-cluster/data										#持久化数据文件存放路径
cluster-enabled yes										#开启集群模式
cluster-config-file nodes_6701.conf						 #集群模式配置文件名称
cluster-node-timeout 15000								#集群超时时间

3.Reids 6702节点配置文件内容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#监听地址
protected-mode no				#关闭保护模式
port 6702						#端口号
daemonize yes						#后台运行
pidfile /data/redis-6.2.6-cluster/var/redis_6702.pid				#pid存放路径
logfile /data/redis-6.2.6-cluster/logs/redis_6702.log				#日志存放路径
always-show-logo yes											 #是否显示总日志
dbfilename redis_6702.rdb												#持久化数据文件名称
dir /data/redis-6.2.6-cluster/data										#持久化数据文件存放路径
cluster-enabled yes										#开启集群模式
cluster-config-file nodes_6702.conf						 #集群模式配置文件名称
cluster-node-timeout 15000								#集群超时时间

4.Reids 6703节点配置文件内容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#监听地址
protected-mode no				#关闭保护模式
port 6703						#端口号
daemonize yes						#后台运行
pidfile /data/redis-6.2.6-cluster/var/redis_6703.pid				#pid存放路径
logfile /data/redis-6.2.6-cluster/logs/redis_6703.log				#日志存放路径
always-show-logo yes											 #是否显示总日志
dbfilename redis_6703.rdb												#持久化数据文件名称
dir /data/redis-6.2.6-cluster/data										#持久化数据文件存放路径
cluster-enabled yes										#开启集群模式
cluster-config-file nodes_6703.conf						 #集群模式配置文件名称
cluster-node-timeout 15000

5.Reids 6704节点配置文件内容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#监听地址
protected-mode no				#关闭保护模式
port 6704						#端口号
daemonize yes						#后台运行
pidfile /data/redis-6.2.6-cluster/var/redis_6704.pid				#pid存放路径
logfile /data/redis-6.2.6-cluster/logs/redis_6704.log				#日志存放路径
always-show-logo yes											 #是否显示总日志
dbfilename redis_6704.rdb												#持久化数据文件名称
dir /data/redis-6.2.6-cluster/data										#持久化数据文件存放路径
cluster-enabled yes										#开启集群模式
cluster-config-file nodes_6704.conf						 #集群模式配置文件名称
cluster-node-timeout 15000

6.Reids 6705节点配置文件内容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#监听地址
protected-mode no				#关闭保护模式
port 6705						#端口号
daemonize yes						#后台运行
pidfile /data/redis-6.2.6-cluster/var/redis_6705.pid				#pid存放路径
logfile /data/redis-6.2.6-cluster/logs/redis_6705.log				#日志存放路径
always-show-logo yes											 #是否显示总日志
dbfilename redis_6705.rdb												#持久化数据文件名称
dir /data/redis-6.2.6-cluster/data										#持久化数据文件存放路径
cluster-enabled yes										#开启集群模式
cluster-config-file nodes_6705.conf						 #集群模式配置文件名称
cluster-node-timeout 15000

7.Reids 6706节点配置文件内容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#监听地址
protected-mode no				#关闭保护模式
port 6706						#端口号
daemonize yes						#后台运行
pidfile /data/redis-6.2.6-cluster/var/redis_6706.pid				#pid存放路径
logfile /data/redis-6.2.6-cluster/logs/redis_6706.log				#日志存放路径
always-show-logo yes											 #是否显示总日志
dbfilename redis_6706.rdb												#持久化数据文件名称
dir /data/redis-6.2.6-cluster/data										#持久化数据文件存放路径
cluster-enabled yes										#开启集群模式
cluster-config-file nodes_6706.conf						 #集群模式配置文件名称
cluster-node-timeout 15000

3.2.将六个节点全部启动

1)启动redis各个节点

[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6701.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6702.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6703.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6704.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6705.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6706.conf

2)查看启动的进程

[root@k8s-master ~]# ps aux | grep redis
root     22166  0.2  0.0 164964  3208 ?        Ssl  16:17   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6701 [cluster]
root     22179  0.2  0.0 164964  3212 ?        Ssl  16:17   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6702 [cluster]
root     22235  0.2  0.0 164964  3216 ?        Ssl  16:17   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6703 [cluster]
root     23748  0.1  0.0 164964  3220 ?        Ssl  16:18   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6704 [cluster]
root     24093  0.1  0.0 164964  3224 ?        Ssl  16:19   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6705 [cluster]
root     24513  0.0  0.0 164964  3212 ?        Ssl  16:19   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6706 [cluster]

3)查看各个节点生成的文件

基于Redis6.2.6版本部署Redis Cluster集群的问题

3.3.配置集群节点之间相互发现

在任意一个节点中操作即可。

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6702
OK
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6703
OK
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6704
OK
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6705
OK
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6706
OK
127.0.0.1:6701> CLUSTER NODES
1de9d406a489e3aedc2f7743114f21700de5d151 192.168.20.10:6702@16702 master - 0 1648715495901 1 connected
f1d6f55a4a66fb97b3be2dff70cf0b8984a9de42 192.168.20.10:6704@16704 master - 0 1648715494000 0 connected
14bd716bdc2726bfbf39eb14c88f072970059676 192.168.20.10:6706@16706 master - 0 1648715494894 5 connected
7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701 myself,master - 0 1648715494000 2 connected
b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703 master - 0 1648715494000 3 connected
c502c900224a0ae6173631746de92d012bd43da3 192.168.20.10:6705@16705 master - 0 1648715494000 4 connected

操作完成后会同步各节点的集群配置文件中。

基于Redis6.2.6版本部署Redis Cluster集群的问题

3.4.为集群中的充当Master的节点分配槽位

1)分配槽位

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701 cluster addslots {0..5461}
OK
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6703 cluster addslots {5462..10922}
OK
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6705 cluster addslots {10923..16383}
OK

2)查看集群状态

分配完槽位之后集群的状态就会处于ok。

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701
127.0.0.1:6701> 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:5
cluster_my_epoch:2
cluster_stats_messages_ping_sent:248
cluster_stats_messages_pong_sent:246
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:499
cluster_stats_messages_ping_received:246
cluster_stats_messages_pong_received:253
cluster_stats_messages_received:499

3)查看集群中的节点信息

虽然现在槽位已经分配完毕,但是当下集群中所有的节点都处于Master角色,还是无法使用。

127.0.0.1:6701> CLUSTER NODES
1de9d406a489e3aedc2f7743114f21700de5d151 192.168.20.10:6702@16702 master - 0 1648715802089 1 connected
f1d6f55a4a66fb97b3be2dff70cf0b8984a9de42 192.168.20.10:6704@16704 master - 0 1648715802000 0 connected
14bd716bdc2726bfbf39eb14c88f072970059676 192.168.20.10:6706@16706 master - 0 1648715802000 5 connected
7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701 myself,master - 0 1648715803000 2 connected 0-5461
b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703 master - 0 1648715803095 3 connected 5462-10922
c502c900224a0ae6173631746de92d012bd43da3 192.168.20.10:6705@16705 master - 0 1648715804100 4 connected 10923-16383

接下来去配置三主三从交叉复制模式,让没有槽位的节点复制有槽位的节点,也就是主从关系。

3.5.配置三主三从交叉复制模式

1)获取集群主节点的信息

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701  cluster nodes | egrep '6701|6703|6705'  | awk '{print $1,$2}'
7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701
b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703
c502c900224a0ae6173631746de92d012bd43da3 192.168.20.10:6705@16705

2)配置交叉复制

1.配置6702节点复制6705节点,充当6705 master节点的slave
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6702
127.0.0.1:6702> CLUSTER REPLICATE c502c900224a0ae6173631746de92d012bd43da3
OK
2.配置6704节点复制6701节点,充当6701 master节点的slave
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6704
127.0.0.1:6704> CLUSTER REPLICATE 7eb4466a8558ab389a9d92d115d5b420fa2a8ffc
OK
3.配置6706节点复制6703节点,充当6703 master节点的slave
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6706
127.0.0.1:6706> CLUSTER REPLICATE b7e93e3f3925c6db664afc59cb08c2abced2933d
OK

3)查看集群节点信息

已经是三主三从交叉复制集群模式了。

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701
127.0.0.1:6701> CLUSTER NODES
1de9d406a489e3aedc2f7743114f21700de5d151 192.168.20.10:6702@16702 slave c502c900224a0ae6173631746de92d012bd43da3 0 1648716239215 4 connected
f1d6f55a4a66fb97b3be2dff70cf0b8984a9de42 192.168.20.10:6704@16704 slave 7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 0 1648716236175 2 connected
14bd716bdc2726bfbf39eb14c88f072970059676 192.168.20.10:6706@16706 slave b7e93e3f3925c6db664afc59cb08c2abced2933d 0 1648716238000 3 connected
7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701 myself,master - 0 1648716237000 2 connected 0-5461
b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703 master - 0 1648716238192 3 connected 5462-10922
c502c900224a0ae6173631746de92d012bd43da3 192.168.20.10:6705@16705 master - 0 1648716237184 4 connected 10923-16383

4.快速搭建Redis Cluster集群

前提条件需要先将6个节点搭建起来,再使用下面的命令快速将三主三从集群部署起来。

[root@redis-cluster redis-6.2.6-cluster]# /data/redis-6.2.6-cluster/bin/redis-cli --cluster create 192.168.20.10:6701 192.168.20.10:6702 192.168.20.10:6703 192.168.20.10:6704 192.168.20.10:6705 192.168.20.10:6706 --cluster-replicas 1 
Can I set the above configuration? (type 'yes' to accept): yes
#--cluster起到的作用就是省掉了节点发现、分配槽位、交叉复制的过程,自动替我们分配。

基于Redis6.2.6版本部署Redis Cluster集群的问题

从输出信息中我们清晰的看到主从的复制关系以及分配的槽位。

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.20.10:6705 to 192.168.20.10:6701
Adding replica 192.168.20.10:6706 to 192.168.20.10:6702
Adding replica 192.168.20.10:6704 to 192.168.20.10:6703

6701、6702、6703节点为主节点,6704、6705、6706节点为从节点。

6704复制6703的主节点、6705复制6701的主节点、6706复制6702的主节点。

架构图如下:

基于Redis6.2.6版本部署Redis Cluster集群的问题

到此这篇关于基于Redis6.2.6版本部署Redis Cluster集群的文章就介绍到这了,更多相关Redis Cluster集群部署内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
redis 查看所有的key方式
May 07 Redis
深入理解redis中multi与pipeline
Jun 02 Redis
Windows中Redis安装配置流程并实现远程访问功能
Jun 07 Redis
redis实现的四种常见限流策略
Jun 18 Redis
了解Redis常见应用场景
Jun 23 Redis
嵌入式Redis服务器在Spring Boot测试中的使用教程
Jul 21 Redis
Window server中安装Redis的超详细教程
Nov 17 Redis
使用RedisTemplat实现简单的分布式锁
Nov 20 Redis
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
Feb 12 Redis
分布式Redis Cluster集群搭建与Redis基本用法
Feb 24 Redis
Redis全局ID生成器的实现
Jun 05 Redis
Redis+AOP+自定义注解实现限流
Jun 28 Redis
Redis分布式锁的7种实现
Redis 哨兵机制及配置实现
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 #Redis
Redis 操作多个数据库的配置的方法实现
Mar 23 #Redis
Redis安装使用RedisJSON模块的方法
Mar 23 #Redis
解决redis批量删除key值的问题
Mar 23 #Redis
源码分析Redis中 set 和 sorted set 的使用方法
You might like
php生成随机数或者字符串的代码
2008/09/05 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
环境工程专业自荐信
2014/03/03 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
大学生年度个人总结
2015/02/15 职场文书
2015年幼师工作总结
2015/04/28 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
建议书的格式及范文
2015/09/14 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书