基于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 12 Redis
详解RedisTemplate下Redis分布式锁引发的系列问题
Apr 27 Redis
redis三种高可用方式部署的实现
May 11 Redis
redis哨兵常用命令和监控示例详解
May 27 Redis
redis中lua脚本使用教程
Nov 01 Redis
linux下安装redis图文详细步骤
Dec 04 Redis
源码分析Redis中 set 和 sorted set 的使用方法
Mar 22 Redis
 Redis 串行生成顺序编码的方法实现
Apr 03 Redis
Redis超详细讲解高可用主从复制基础与哨兵模式方案
Apr 07 Redis
Redis如何实现验证码发送 以及限制每日发送次数
Apr 18 Redis
Redis 限流器
May 15 Redis
Redis 异步机制
May 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
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
python重试装饰器示例
2014/02/11 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
Python reversed函数及使用方法解析
2020/03/17 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
企业管理部经理岗位职责
2013/12/24 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
无罪辩护词范文
2015/05/21 职场文书
cf战队宣传语
2015/07/13 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
MySQL的join buffer原理
2021/04/29 MySQL