基于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配置文件中常用配置详解
Apr 14 Redis
redis实现共同好友的思路详解
May 26 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
使用redis实现延迟通知功能(Redis过期键通知)
Sep 04 Redis
Redis读写分离搭建的完整步骤
Sep 14 Redis
基于Redis结合SpringBoot的秒杀案例详解
Oct 05 Redis
Window server中安装Redis的超详细教程
Nov 17 Redis
分布式Redis Cluster集群搭建与Redis基本用法
Feb 24 Redis
redis数据一致性的实现示例
Mar 18 Redis
muduo TcpServer模块源码分析
Apr 26 Redis
Redis过期数据是否会被立马删除
Jul 23 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 和 MySQL 时区的一点总结
2008/03/26 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
php表单提交实例讲解
2015/11/12 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
python开启多个子进程并行运行的方法
2015/04/18 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
化工工艺专业求职信
2013/09/22 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
离职告别感言
2015/08/04 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang