❤️万字长文总结❤️一篇学会redis高可用✔集群✔搭建详细教程(代码片段)

罗四强 罗四强     2022-12-02     495

关键词:

大家好,我是Lex 喜欢欺负超人那个Lex

擅长领域:python开发、网络安全渗透、Windows域控Exchange架构

今日重点:今天总结一下Redis集群高可用的搭建流程

【惊喜推荐+优质资源 见 文末,建议收藏!!!】

建议:收藏+实操,一定要自己来一遍哦。

一、Redis下载及安装

1、下载地址

http://distfiles.macports.org/redis/redis-5.0.7.tar.gz

2、解压Redis安装包

#解压redis
[root@open-falcon mnt]# tar -zxvf redis-5.0.7.tar.gz

#解压得到包如下
[root@open-falcon mnt]# cd redis-5.0.7

#包内文件如下
[root@open-falcon redis-5.0.7]# ls
00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-moduleapi  sentinel.conf  tests
BUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  runtest-sentinel   src            utils
[root@open-falcon redis-5.0.7]# 

3、Redis编译安装

#进入解压包
[root@open-falcon redis-5.0.7]# cd redis-5.0.7

#编译&安装
[root@open-falcon redis-5.0.7]# make && make install

三、集群搭建配置

1、总体构造

Redis高可用集群,一般选三台服务器:这样,我们在一台主节点挂了之后,另外两台可以选举其中一台担任主节点master的角色。

①slave节点配置从master节点同步数据

②哨兵sentinel故障转移机制:每个redis节点搭建一个监控哨兵,当redis的master节点挂掉之后:三个哨兵选举一个slave节点 成为master节点

#部署在同一台服务器上,使用3个端口对外提供服务

主节点master    
1台    
Redis服务    192.168.154.145 6379
sentinel哨兵 192.168.154.145 26379

从节点slave     
2台    
Redis服务    192.168.154.145 27001
sentinel哨兵 192.168.154.145 27002

2、伪集群

由于现场没有三台服务器,我们就在一台服务器上,使用3个端口,来给他搭一个"伪集群":

何为"伪集群"呢?

"伪集群" 架构与真正集群完全一样,故障转移、高可用都可以。

只是搭建在一台服务器上,使用3个端口对外提供服务。

生产环境下,集群环境还是需要使用3台不同的服务器,从而保证高可用。这里只是节约资源、方便搭建。

3、主节点redis服务6379配置

完整配置及步骤如下:

1、创建主节点工作目录 redis-6379
mkdir -p /usr/local/redis-6379

2、将配置文件拷贝到工作目录下
cp redis-5.0.7/redis.conf /usr/local/redis-6379
3、主节点 6379 端口配置
#打开主节点redis.conf
vim /usr/local/redis-6379/redis.conf

4、修改如下内容:左侧为修改的行数,方便大家查找
69 bind 0.0.0.0
92 port 6379
136 daemonize yes
158 pidfile /var/run/redis_6379.pid
171 logfile "/usr/local/redis-6379/redis-6379.log"
#默认配置不用修改
218 save 900 1
219 save 300 10
220 save 60 10000
#全量备份文件名
253 dbfilename redis-6379.rdb
#指定路径名
263 dir /usr/local/redis-6379
#设置redis密码
509  requirepass 123456
#开启增量备份
701 appendonly yes
705 appendfilename "appendonly-6379.aof"

4、redis从节点服务 7001/7002配置

注意,从节点与主节点配置的区别主要在两个地方

①配置主节点:replicaof 192.168.154.145 6379 

②配置主节点的登录密码masterauth 123456

完整配置及步骤如下:

1、创建从节点工作目录 redis-7001 和 redis-7002
mkdir -p /usr/local/redis-7001
mkdir -p /usr/local/redis-7002
2、将配置文件拷贝到工作目录下
cp redis-5.0.7/redis.conf /usr/local/redis-7001
cp redis-5.0.7/redis.conf /usr/local/redis-7002
3、从节点 7001 / 7002 端口配置

#分别打开从节点redis.conf

vim /usr/local/redis-7001/redis.conf
vim /usr/local/redis-7002/redis.conf
4、7001 从节点配置,左侧为修改的行数,方便大家查找

69 bind 0.0.0.0
92 port 7001
136 daemonize yes
158 pidfile /var/run/redis_7001.pid
171 logfile "/usr/local/redis-7001/redis-7001.log"
#默认配置不用修改
218 save 900 1
219 save 300 10
220 save 60 10000
#全量备份文件名
253 dbfilename redis-7001.rdb
#指定路径名
263 dir /usr/local/redis-7001
#设置主节点 地址端口+主节点连接密码
286 replicaof 192.168.154.145 6379
293 masterauth 123456
#设置redis密码
509  requirepass 123456
#开启增量备份
701 appendonly yes
705 appendfilename "appendonly-7001.aof"
5、7002 从节点配置,左侧为修改的行数,方便大家查找

69 bind 0.0.0.0
92 port 7002 
136 daemonize yes
158 pidfile /var/run/redis_7002.pid
171 logfile "/usr/local/redis-7002/redis-7002.log"
#默认配置不用修改
218 save 900 1
219 save 300 10
220 save 60 10000
#全量备份文件名
253 dbfilename redis-7002.rdb
#指定路径名
263 dir /usr/local/redis-7002
#设置主节点 地址端口+主节点连接密码
286 replicaof 192.168.154.145 6379
293 masterauth 123456
#设置redis密码
509  requirepass 123456
#开启增量备份
701 appendonly yes
705 appendfilename "appendonly-7002.aof"

四、故障转移/高可用配置(哨兵模式sentinel)

1、总体架构

主节点哨兵:

6379端口redis主服务,哨兵默认端口为26379

从节点哨兵:

7001端口redis服务,哨兵使用27001端口

7002端口redis服务,哨兵使用27002端口

2、主节点master配置哨兵sentinel

为了方便管理,我们把哨兵工作目录分别建在对应的redis工作目录下

注意:

①配置master的地址及命名(mymaster为集群名称):sentinel monitor mymaster 192.168.154.145 6379 2

②配置连接redis主节点的密码 sentinel auth-pass mymaster 123456

③日志目录一定要创建,因为出问题,方便查找原因。 logfile "/usr/local/redis-6379/sentinel/redis-sentinel.log"

1、创建主节点 sentinel工作目录
mkdir -p /usr/local/redis-6379/sentinel/
2、将配置文件拷贝到sentinel工作目录下
cp redis-5.0.7/sentinel.conf /usr/local/redis-6379/sentinel/
3、修改配置文件 左侧为修改的行数,方便大家查找
vim /usr/local/redis-6379/sentinel/sentinel.conf 

#配置哨兵端口
21 port 26379
#配置进程id存储地址
32 pidfile "/usr/local/redis-6379/redis-sentinel-26379.pid"
#配置log路径    
37 logfile "/usr/local/redis-6379/sentinel/redis-sentinel.log"
#配置哨兵工作目录
64 dir "/usr/local/redis-6379/sentinel"
#配置监控的redis主节点
112 sentinel monitor mymaster 192.168.154.145 6379 2
#配置主节点登录密码
120 sentinel auth-pass mymaster 123456

3、从节点slave配置哨兵sentinel

①从节点的配置,除了工作目录不同及端口,其余与主节点完全一致

1、创建从节点 sentinel工作目录
mkdir -p /usr/local/redis-7001/sentinel/
mkdir -p /usr/local/redis-7002/sentinel/
2、将配置文件拷贝到sentinel工作目录下
cp redis-5.0.7/sentinel.conf /usr/local/redis-7001/sentinel/
cp redis-5.0.7/sentinel.conf /usr/local/redis-7002/sentinel/
3、分别修改slave节点 哨兵配置文件
vim /usr/local/redis-7001/sentinel/sentinel.conf 
vim /usr/local/redis-7002/sentinel/sentinel.conf 
4、27001节点哨兵的配置 左侧为修改的行数,方便大家查找

#配置哨兵端口
21 port 27001
#配置进程id存储地址
32 pidfile "/usr/local/redis-7001/redis-sentinel-27001.pid"
#配置log路径    
37 logfile "/usr/local/redis-7001/sentinel/redis-sentinel.log"
#配置哨兵工作目录
64 dir "/usr/local/redis-7001/sentinel"
#配置监控的redis主节点
112 sentinel monitor mymaster 192.168.154.145 6379 2
#配置主节点登录密码
120 sentinel auth-pass mymaster 123456
5、27002哨兵节点的配置 左侧为修改的行数,方便大家查找

#配置哨兵端口
21 port 27002
#配置进程id存储地址
32 pidfile "/usr/local/redis-7002/redis-sentinel-27002.pid"
#配置log路径    
37 logfile "/usr/local/redis-7002/sentinel/redis-sentinel.log"
#配置哨兵工作目录
64 dir "/usr/local/redis-7002/sentinel"
#配置监控的redis主节点
112 sentinel monitor mymaster 192.168.154.145 6379 2
#配置主节点登录密码
120 sentinel auth-pass mymaster 123456

到此全部配置完成。

五、启动集群

1、启动所有redis服务节点

#分别启动三个节点的redis服务
[root@mail ~]# redis-server /usr/local/redis-6379/redis.conf
[root@mail ~]# redis-server /usr/local/redis-7001/redis.conf 
[root@mail ~]# redis-server /usr/local/redis-7002/redis.conf 

2、启动所有哨兵sentinel服务

#启动时,根据配置文件启动
[root@mail ~]# redis-sentinel /usr/local/redis-6379/sentinel/sentinel.conf 
[root@mail ~]# redis-sentinel /usr/local/redis-7001/sentinel/sentinel.conf 
[root@mail ~]# redis-sentinel /usr/local/redis-7002/sentinel/sentinel.conf 

3、查看服务进程

#如下图:三个redis服务+三个哨兵监控 全部启动成功
[root@mail ~]# ps aux|grep redis   
root      50845  0.0  0.1 158068  3904 ?        Ssl  07:50   0:42 redis-server 0.0.0.0:6379                               
root      50166  0.0  0.1 161652  3768 ?        Ssl  07:39   0:43 redis-server 0.0.0.0:7001                    
root      50173  0.1  0.2 161652  4884 ?        Ssl  07:40   0:53 redis-server 0.0.0.0:7002                    
root      50370  0.1  0.1 152436  3692 ?        Ssl  07:43   1:14 redis-sentinel *:26379 [sentinel]                          
root      50375  0.1  0.0 152436  1748 ?        Ssl  07:43   1:15 redis-sentinel *:27001 [sentinel]                          
root      50431  0.1  0.0 152436  1712 ?        Ssl  07:43   1:14 redis-sentinel *:27002 [sentinel]                          

六、测试:数据同步+读写分离+故障转移

1、数据同步测试

测试目标:master主节点 写入/修改/删除数据,slave从节点会自动同步master的数据操作记录。

① redis-cli链接master主节点,写入age和name 两个数据

#链接redis,设置两个值,如下
[root@mail ~]# redis-cli -a 123456 -p 6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set age 25
OK
127.0.0.1:6379> set name lex
OK

② 登录slave从节点查看

#登录slave从节点
[root@mail ~]# redis-cli -a 123456 -p 7001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

#查看所有数据
127.0.0.1:7001> keys *
1) "age"
2) "name"

#查看age数据
127.0.0.1:7001> get age
"25"

#尝试修改数据
127.0.0.1:7001> set age 30
(error) READONLY You can't write against a read only replica.
#修改失败,slave从节点 数据只读

2、master/slave节点查看

① 链接哨兵:查看master节点和slave节点的分配情况

② 链接命令:redis-cli -a 123456 -p 26379 ,同样使用redis-cli,只是链接到sentinel的端口即可

查看master主节点地址:6379端口服务

#链接哨兵sentinel 同样使用redis-cli
[root@mail ~]# redis-cli -a 123456 -p 26379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#查看mymaster(我们配置的集群名)  集群的master 是哪个
127.0.0.1:26379> sentinel master mymaster
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "192.168.154.145"
 5) "port"
 6) "6379"
 7) "runid"
 8) "105cc1c986fcda65ad4ddba69012e8e6e0073e1f"
 9) "flags"
10) "master"
...

③ 查看slave节点地址:两个slave节点分别是7001和7002服务,可以看到两个slave节点指向的master节点为6379

#命令如下:
127.0.0.1:26379> sentinel slaves mymaster
1)  1) "name"
    2) "192.168.154.145:7001"
    3) "ip"
    4) "192.168.154.145"
    5) "port"
    6) "7001"
    9) "flags"
   10) "slave"
   31) "master-link-status"
   32) "ok"
   33) "master-host"
   34) "192.168.154.145"
   35) "master-port"
   36) "6379"
...

2)  1) "name"
    2) "192.168.154.145:7002"
    3) "ip"
    4) "192.168.154.145"
    5) "port"
    6) "7002"
    9) "flags"
   10) "slave"
   31) "master-link-status"
   32) "ok"
   33) "master-host"
   34) "192.168.154.145"
   35) "master-port"
   36) "6379"
...

3、故障转移(高可用)测试

测试目的:master主节点挂掉之后,我们的sentinel集群可以通过选举机制,重新在slave节点中选举一个作为新的master节点。

① 关闭主节点6379

#链接主节点,shutdown关闭主节点
[root@mail ~]# redis-cli -a 123456 -p 6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> shutdown
not connected> 

② 查看此时的master节点

链接到哨兵,查看主节点:此时,经过三个哨兵的选举,主节点变为 7002

#链接到哨兵,查看主节点:主节点变为 7002
[root@mail ~]# redis-cli -a 123456 -p 26379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:26379> sentinel master mymaster
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "192.168.154.145"
 5) "port"
 6) "7002"
 7) "runid"
 8) "105cc1c986fcda65ad4ddba69012e8e6e0073e1f"
 9) "flags"
10) "master"
...
127.0.0.1:26379> 

③此时,再查看slave节点的情况

发现slave节点变为:6379和7001两个,而且6379的状态为 "s_down,slave,disconnected",因为我们关闭了6379

[root@mail ~]# redis-cli -a 123456 -p 26379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:26379> sentinel slaves mymaster
1)  1) "name"
    2) "192.168.154.145:6379"
    3) "ip"
    4) "192.168.154.145"
    5) "port"
    6) "6379"
    7) "runid"
    8) "e740b7285067b2dbb8c2640745196099460f4bb3"
    9) "flags"
   10) "s_down,slave,disconnected"

...
2)  1) "name"
    2) "192.168.154.145:7001"
    3) "ip"
    4) "192.168.154.145"
    5) "port"
    6) "7001"
    7) "runid"
    8) "19a7647509ba020adfd06b1eb40f1f35d06c549d"
    9) "flags"
   10) "slave"
...
127.0.0.1:26379> 

④ 所以,故障转移就成功了。

4、读写分离测试

① redis集群开启之后,slave从节点的权限 默认是只读的;当然我们也可以开启slave节点的写入权限。

所以,写数据:链接master主节点;读数据:链接slave从节点。

如下图:slave从节点,没有写入权限

#登录slave从节点
[root@mail ~]# redis-cli -a 123456 -p 7001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

#查看所有数据
127.0.0.1:7001> keys *
1) "age"
2) "name"

#查看age数据
127.0.0.1:7001> get age
"25"

#尝试修改数据
127.0.0.1:7001> set age 30
(error) READONLY You can't write against a read only replica.
#修改失败,slave从节点 数据只读


  优质资源

推荐阅读

【python实战】前女友婚礼,python破解婚礼现场的WIFI,把名称改成了

【python实战】前女友发来加密的 “520快乐.pdf“,我用python破解开之后,却发现

【python实战】昨晚,我用python帮隔壁小姐姐P证件照 自拍,然后发现...

【python实战】女友半夜加班发自拍 python男友用30行代码发现惊天秘密

【python实战】python你TM太皮了——区区30行代码就能记录键盘的一举一动

python实战】女神相册密码忘记了,我只用Python写了20行代码~~~

叫你别随便重启Redis!!!怎么样,数据全丢了吧~~~

python你TM太皮了——区区30行代码就能记录键盘的一举一动

白帽SQL注入实战过程记录(2)——根据information_schema组装SQL注入语句

游戏完整源码

1、pygame开发实战开发30例 完整源码

https://download.csdn.net/download/weixin_42350212/15836285

2、订阅专栏,获取完整源码+教程

一起来学pygame吧 游戏开发30例(四)——俄罗斯方块小游戏

一起来学pygame吧 游戏开发30例(二)——塔防游戏

推荐专栏

        渗透测试实战专栏

        Windows AD/Exchange管理专栏

        Linux高性能服务器搭建 

        PowerShell自动化专栏


CSDN官方学习推荐 ↓ ↓ ↓ 

CSDN出的Python和Java的全栈知识图谱,太强了,推荐给大家!

❤️bitmapshyperlogloggeospatial❤️——redis三大特殊数据类型详述(万字长文原理讲解,大厂面试高频知识点,一文尽收囊中)(代码片段)

本文已收录于专栏❤️《Redis之大厂必备技能包》❤️欢迎各位关注、三连博主的文章及专栏,全套Redis学习资料,大厂必备技能!目录简介一、Bitmaps1、简介2、基本操作2.1SETBITkeyoffsetvalue2.2GETBITkeyoffset2.3BITCOUNTkey[start]... 查看详情

opencv-python实战——opencv图像运算(❤️万字长文,含大量示例❤️)(代码片段)

OpenCV-Python实战(5)——OpenCV图像运算(❤️万字长文,含大量示例❤️)0.前言1.饱和运算2.图像加减法与图像混合3.按位运算4.形态变换4.1膨胀运算与腐蚀运算4.2开运算与闭运算4.3形态梯度运算4.4顶帽运算与... 查看详情

golang✔️实战✔️10种加密方法实现☢️万字长文建议手收藏☢️(代码片段)

【Golang】✔️实战✔️10种加密方法实现☢️万字长文建议手收藏☢️概述md5SHA-2sha256sha512计算文件哈希base64AESDESDES3DESRSA函数详解GenerateKey()MarshalPKCS1PrivateKey()pem编码生成公钥私钥实现加密概述今天来带大家实现以下最常用的10中... 查看详情

golang✔️实战✔️10种加密方法实现☢️万字长文建议手收藏☢️(代码片段)

【Golang】✔️实战✔️10种加密方法实现☢️万字长文建议手收藏☢️概述md5SHA-2sha256sha512计算文件哈希base64AESDESDES3DESRSA函数详解GenerateKey()MarshalPKCS1PrivateKey()pem编码生成公钥私钥实现加密概述今天来带大家实现以下最常用的10中... 查看详情

☀️全网唯一万字长文讲解nginx安装运营维护☀️《❤️记得收藏❤️》(代码片段)

☀️全网唯一万字长文讲解Nginx安装运营维护☀️《❤️记得收藏❤️》目录😊开讲啦!!!!🏳️‍🌈🏳️‍🌈1、前言🚣2、安装🗾2.1、安装依赖🏔️2.2、下载⛰️2.3、编程安... 查看详情

⭐redis分布式——主从复制sentinel集群彻底吃透⭐(看完这篇万字长文,你的redis水平将会上升一个层次)(代码片段)

    本文已收录于专栏❤️《Redis精通系列》❤️上千人点赞收藏,全套Redis学习资料,大厂必备技能!目录一、主从复制1、简介2、主从复制的演进2.1版本2.8以前2.2版本2.8-4.02.3版本4.0二、Sentinel1、简介2、Sentinel初始... 查看详情

opencv-python实战——opencv常见图像处理技术(❤️万字长文,含大量示例❤️)(代码片段)

...on实战(4)——OpenCV常见图像处理技术(❤️万字长文,含大量示例❤️)0.前言1.拆分与合并通道2.图像的几何变换2.1缩放图像2.2平移图像2.3旋转图像2.4图像的仿射变换2.5图像的透视变换2.6裁剪图像3.图像滤波... 查看详情

selenium万字长文&&全网最详(上)-王者笔记❤️建议收藏❤️(代码片段)

目录🎅第一部分——初识Selenium!🍏1.Selenium是什么?🍒2.运行环境🍓3.安装1️⃣安装selenium库:2️⃣安装ChromeDriver驱动:🍌4.selenium的作用和工作原理1️⃣作用:2️⃣工作原理:&#x 查看详情

❤️docker超详细基础教程,快速入门docker首选❤️(万字长文建议收藏)(代码片段)

一、docker概述1.什么是dockerDocker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可... 查看详情

万字长文|stl算法总结

本篇所有算法源码均已同步收录GitHub仓库,欢迎点个小⭐️:https://github.com/rongweihe/CPPNotes/tree/master/STL-source-code-notes​大家好,我是小贺。上一篇更新了​​STL关联式容器源码​​,今天我们来学习下STL算法。STL算法博大精深,... 查看详情

⭐redis分布式——主从复制sentinel集群彻底吃透⭐(看完这篇万字长文,你的redis水平将会上升一个层次)(代码片段)

    本文已收录于专栏❤️《Redis精通系列》❤️上千人点赞收藏,全套Redis学习资料,大厂必备技能!目录一、主从复制1、简介2、主从复制的演进2.1版本2.8以前2.2版本2.8-4.02.3版本4.0二、Sentinel1、简介2、Sentinel初始... 查看详情

opencv-python实战——opencv中绘制图形与文本(万字总结,️❤️建议收藏️❤️)(代码片段)

...V-Python实战(3)——OpenCV中绘制图形与文本(万字总结,️📕建议收藏📕)0.前言1.OpenCV绘图基础2.OpenCV绘制图形2.1基本图形的绘制2.1.1直线2.1.2矩形2.1.3圆形2.2高级图形的绘制2.2.1剪裁线2.2.2箭头2.2.3椭... 查看详情

python万字博文教你玩透beautifulsoup库,不信你学不会❤️建议收藏系列❤️(代码片段)

 👻👻相信不少小伙伴们通过我的两篇万字博文的轮番轰炸已经实现了从入坑到会完全学会requests库,并且可以独立开发出属于自己的小爬虫项目!!!——爬虫之路,永无止境~👻👻   ... 查看详情

❤万字长文js全网最细笔记2️⃣(全网最强,建议收藏)❤(代码片段)

    大家好,我是会写Bug又会Rap的XiaoLin。遇事先百度,学习关注我,今天我们来学学JavaScript💦往期回顾女朋友七夕节鸽我只为偷偷在家准备秋招简历?我一怒之下手把手教她写满分简历秋招提前批专场面试... 查看详情

❤️爆肝四万字的mysql总结全面整理+详细解释❤️(代码片段)

文章目录1.初识MySQL1.2数据库分类1.3MySQL简介1.4MySQL安装1.5MySQL(压缩包)安装配置1.6SQLyog使用的注意事项1.7连接数据库和一些基本命令2.操作数据库2.1操作数据库2.2数据库的数据类型(列类型)2.3数据库的字段属性2.4创建数据库表(... 查看详情

❤️爆肝万字!一文最全总结之spring从入门到入土❤️(建议收藏)(代码片段)

文章目录最新更新前言1.Spring概述1.1介绍2.IoC入门2.1什么是IoC2.2IoC入门案例1(基础案例)2.3IoC入门案例2(依赖注入)2.4IoC入门案例3(面向接口编程)2.5IoC入门案例4(整合JUnit4)3.IoC详解3.1Bean的创建... 查看详情

四万字长文总结多线程,一篇就够了!(代码片段)

多线程目录多线程1.认识线程及线程的创建<1>.线程的概念<2>.线程的特性<3>.线程的创建方式(1)继承Thread类(2)实现Runnable接口(3)实现Callable接口2.线程的常用方法<1>构造方法和属性的获取方法<2>常用方法(1)run()... 查看详情

四万字长文总结多线程,一篇就够了!(代码片段)

多线程目录多线程1.认识线程及线程的创建<1>.线程的概念<2>.线程的特性<3>.线程的创建方式(1)继承Thread类(2)实现Runnable接口(3)实现Callable接口2.线程的常用方法<1>构造方法和属性的获取方法<2>常用方法(1)run()... 查看详情