基于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 相关文章推荐
Redis6.0搭建集群Redis-cluster的方法
May 08 Redis
Redis 配置文件重要属性的具体使用
May 20 Redis
Windows中Redis安装配置流程并实现远程访问功能
Jun 07 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
Redis读写分离搭建的完整步骤
Sep 14 Redis
redis缓存存储Session原理机制
Nov 20 Redis
分布式Redis Cluster集群搭建与Redis基本用法
Feb 24 Redis
Redis中有序集合的内部实现方式的详细介绍
Mar 16 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
 Redis 串行生成顺序编码的方法实现
Apr 03 Redis
Redis sentinel哨兵集群的实现步骤
Jul 15 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
python中比较两个列表的实例方法
2019/07/04 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
信息专业本科生个人的自我评价
2013/10/28 职场文书
中学生自我评价范文
2015/03/03 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
python ConfigParser库的使用及遇到的坑
2022/02/12 Python
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python