目录

主从复制

概念

主从复制的作用

为什么使用集群

环境配置

既然需要启动多个服务,就需要多个配置文件。每个配置文件对应修改以下信息:

启动 3 个redis集群

一主二从

命令方式

6379

6380

6381

配置文件方式

细节

1.主机可读可写,但是多用于写,从机只能读,不能写。主机中的所有数据,都会自动被从机保存

2.主机宕机

3.主机又重新启动

4.从机宕机,主机此时写数据,从机在次链接

复制原理

薪火相传模式

6379

6380

6381

反客为主

主机宕机,选取一个从机当主机  手动模式 slaveof no one

哨兵模式

哨兵模式概述

Redis哨兵

Redis配置哨兵模式

测试

哨兵的核心配置 sentinel.conf

启动哨兵

关闭Master节点

6379

8080

哨兵

6379主机再次启动

哨兵模式优缺点

优点:

缺点:

哨兵模式的全部配置

哨兵集群配置


主从复制

概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower数据的复制是单向的!只能由主节点复制到从节点主节点以写为主、从节点以读为主)。

默认情况下,每台Redis服务器都是主节点,一个主节点可以有0个或者多个从节点,但每个从节点只能由一个主节点。

主从复制的作用

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式。
  2. 故障恢复:当主节点故障时,从节点可以暂时替代主节点提供服务,是一种服务冗余的方式
  3. 负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担服务器的负载;尤其是在多读少写的场景下,通过多个从节点分担负载,提高并发量。
  4. 高可用(集群)基石:主从复制还是哨兵和集群能够实施的基础。

一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的(宕机

原因如下:

1、从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;

2、从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所有内存用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G。

为什么使用集群

  1. 单台服务器难以负载大量的请求
  2. 单台服务器故障率高,系统崩坏概率大
  3. 单台服务器内存容量有限。

环境配置

只配置从库,不配置住库

127.0.0.1:6379> info replication       # 查看当前库的信息
# Replication
role:master                            # 角色 master
connected_slaves:0                     # 没有从机
master_failover_state:no-failover
master_replid:d043e0cf731f4d99c95d16d08a42b4397ea3acd8
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

既然需要启动多个服务,就需要多个配置文件。每个配置文件对应修改以下信息:

  • 端口号
  • daemonize yes   后台启动
  • pid 名字
  • log  日志文件名
  • dump.rdb 名字
[root@gh gconfig]# cp redis.config redis79-主.conf
[root@gh gconfig]# cp redis.config redis80-从.conf
[root@gh gconfig]# cp redis.config redis81-从.conf
[root@gh gconfig]# ls
redis79-主.conf  redis80-从.conf  redis81-从.conf  redis.config
[root@gh gconfig]# vim redis79-主.conf
[root@gh gconfig]# vim redis80-从.conf
[root@gh gconfig]# vim redis81-从.conf

启动 3 个redis集群

[root@gh bin]# ps -ef|grep redis
root      9717     1  0 23:06 ?        00:00:00 redis-server *:6379
root     10763 18466  0 23:07 pts/0    00:00:00 redis-cli -p 6379
root     14922     1  0 23:08 ?        00:00:00 redis-server *:6380
root     14936     1  0 23:08 ?        00:00:00 redis-server *:6381
root     19100 17056  0 23:09 pts/2    00:00:00 grep --color=auto redis

一主二从

默认情况下,每台Redis服务器都是主节点,我们一般情况下只用配置从机就好了!

认老大!一主(79)二从(80,81)

使slaveof host prot用就可以为从机配置主机了。

命令方式

6379

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2        # 两个从机
slave0:ip=127.0.0.1,port=6380,state=online,offset=84,lag=1   # 状态 state 在线 online
slave1:ip=127.0.0.1,port=6381,state=online,offset=84,lag=1
master_failover_state:no-failover
master_replid:d50bd7562e07cb7fb58f5951624145fa5c6e3de6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:84

6380

127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
# Replication
role:slave                # 从机
master_host:127.0.0.1     # 主机地址
master_port:6379          # 主机端口号
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:0
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:d50bd7562e07cb7fb58f5951624145fa5c6e3de6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0

6381

127.0.0.1:6381> slaveof 127.0.0.1 6379
OK
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:42
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:d50bd7562e07cb7fb58f5951624145fa5c6e3de6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:29
repl_backlog_histlen:14

真实的主从配置应该是配置文件中配置,这样是永久的,命令 是 暂时 

配置文件方式

细节

1.主机可读可写,但是多用于写,从机只能读,不能写。主机中的所有数据,都会自动被从机保存

主机写:

从机读:

2.主机宕机

没有配置哨兵模式的情况下,从机还是从机

3.主机又重新启动

主机断开链接,从机依旧链接到主机的,但是没有写操作,这个时候主机回来了,从机依旧可以直接获取主机的写信息。

4.从机宕机,主机此时写数据,从机在次链接

立马就可以从主机中获取值

复制原理

Slave  启动成功连接到 master 后会发送一个sync同步命令

Master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。

全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步

但是只要是重新连接master,一次完全同步(全量复制)将被自动执行!我们的数据一定可以在从机中看到

薪火相传模式

6379

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=280,lag=0
master_failover_state:no-failover
master_replid:2cb7e542b4be7f74d2570be82d2c371dfa73314e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:280
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:280

6380

6381

127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
OK
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:238
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:2cb7e542b4be7f74d2570be82d2c371dfa73314e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:238
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:29
repl_backlog_histlen:210

反客为主

主机宕机,选取一个从机当主机  手动模式 slaveof no one

谋朝篡位

如果主机断开的了链接,我们可以是使用 slaveof no one    让自己变成主机,其他的从机就可以自动链接到这个最新的节点(手动),如果此时  原来主机 回来了(光杆司令),需要重新链接

谋朝篡位的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

哨兵模式

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式

哨兵模式概述

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

Redis哨兵

这里的哨兵有两个作用

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式

用文字描述一下故障切换(failover)的过程。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。

Redis配置哨兵模式

配置3个哨兵和1主2从的Redis服务器来演示这个过程。

服务类型 是否是主服务器 IP地址 端口
Redis 127.0.0.1 6379
Redis 127.0.0.1 6380
Redis 127.0.0.1 6381
Sentinel - 127.0.0.1 26379
Sentinel - 127.0.0.1 26379
Sentinel - 127.0.0.1 26379

测试

哨兵的核心配置 sentinel.conf

[root@gh gconfig]# vim sentinel.conf 创建sentinel#  sentinel monitor 被监控得名称 host port 1
sentinel monitor mymaster 127.0.0.1 6379 1数字1表示 :当一个哨兵主观认为主机断开,就可以客观认为主机故障,然后开始选举新的主机。
  • 后面这个1代表 如果主机宕机了 slave 投票看让谁接替成为主机,票数最多的,就会成为主机

启动哨兵

[root@gh bin]# redis-sentinel gconfig/sentinel.conf
32526:X 06 Mar 2022 11:58:25.136 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
32526:X 06 Mar 2022 11:58:25.136 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=32526, just started
32526:X 06 Mar 2022 11:58:25.136 # Configuration loaded
32526:X 06 Mar 2022 11:58:25.136 * monotonic clock: POSIX clock_gettime_._                                                  _.-``__ ''-._                                             _.-``    `.  `_.  ''-._           Redis 6.2.5 (00000000/0) 64 bit.-`` .-```.  ```\/    _.,_ ''-._                                  (    '      ,       .-`  | `,    )     Running in sentinel mode|`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379|    `-._   `._    /     _.-'    |     PID: 32526`-._    `-._  `-./  _.-'    _.-'                                   |`-._`-._    `-.__.-'    _.-'_.-'|                                  |    `-._`-._        _.-'_.-'    |           https://redis.io       `-._    `-._`-.__.-'_.-'    _.-'                                   |`-._`-._    `-.__.-'    _.-'_.-'|                                  |    `-._`-._        _.-'_.-'    |                                  `-._    `-._`-.__.-'_.-'    _.-'                                   `-._    `-.__.-'    _.-'                                       `-._        _.-'                                           `-.__.-'                                               32526:X 06 Mar 2022 11:58:25.136 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
32526:X 06 Mar 2022 11:58:25.150 # Sentinel ID is 176ac05ea08c542f3316e439653b1c55068c5dd4
32526:X 06 Mar 2022 11:58:25.150 # +monitor master mymaster 127.0.0.1 6379 quorum 1
32526:X 06 Mar 2022 11:58:25.151 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
32526:X 06 Mar 2022 11:58:25.162 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379

关闭Master节点

这个时候就会从主机中个随机选择一个服务器(投票算法)

6379

127.0.0.1:6379> shutdown
not connected> exit

8080

哨兵

6379主机再次启动

自动链接到,哨兵模式下,选举出来的 主

哨兵模式优缺点

优点:

  1. 哨兵集群,基于主从复制模式,所有主从复制的优点,它都有
  2. 主从可以切换,故障可以转移,系统的可用性更好
  3. 哨兵模式是主从模式的升级,手动到自动,更加健壮

缺点:

  1. Redis不好在线扩容,集群容量一旦达到上限,在线扩容就十分麻烦
  2. 实现哨兵模式的配置其实是很麻烦的,里面有很多配置项

哨兵模式的全部配置

完整的哨兵模式配置文件 sentinel.conf

# Example sentinel.conf# 哨兵sentinel实例运行的端口 默认26379
port 26379# 哨兵sentinel的工作目录
dir /tmp# 哨兵sentinel监控的redis主节点的 ip port
# master-name  可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
# quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 1# 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster MySUPER--secret-0123passw0rd# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
这个数字越小,完成failover所需的时间就越长,
但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。
可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1# 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000# SCRIPTS EXECUTION#配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。
#对于脚本的运行结果有以下规则:
#若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
#若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
#如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
#一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。#通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,
#这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,
#一个是事件的类型,
#一个是事件的描述。
#如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
#通知脚本
# sentinel notification-script <master-name> <script-path>sentinel notification-script mymaster /var/redis/notify.sh# 客户端重新配置主节点参数脚本
# 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。
# 以下参数将会在调用脚本时传给脚本:
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
# 目前<state>总是“failover”,
# <role>是“leader”或者“observer”中的一个。
# 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
# 这个脚本应该是通用的,能被多次调用,不是针对性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
配置项 参数类型 作用
port 整数 启动哨兵进程端口
dir 文件夹目录 哨兵进程服务临时文件夹,默认为/tmp,要保证有可写入的权限
sentinel down-after-milliseconds <服务名称><毫秒数(整数)> 指定哨兵在监控Redis服务时,当Redis服务在一个默认毫秒数内都无法回答时,单个哨兵认为的主观下线时间,默认为30000(30秒)
sentinel parallel-syncs <服务名称><服务器数(整数)> 指定可以有多少个Redis服务同步新的主机,一般而言,这个数字越小同步时间越长,而越大,则对网络资源要求越高
sentinel failover-timeout <服务名称><毫秒数(整数)> 指定故障切换允许的毫秒数,超过这个时间,就认为故障切换失败,默认为3分钟
sentinel notification-script <服务名称><脚本路径> 指定sentinel检测到该监控的redis实例指向的实例异常时,调用的报警脚本。该配置项可选,比较常用

sentinel down-after-milliseconds配置项只是一个哨兵在超过规定时间依旧没有得到响应后,会自己认为主机不可用。对于其他哨兵而言,并不是这样认为。哨兵会记录这个消息,当拥有认为主观下线的哨兵达到sentinel monitor所配置的数量时,就会发起一次投票,进行failover,此时哨兵会重写Redis的哨兵配置文件,以适应新场景的需要。

哨兵集群配置

# Example sentinel.conf# port <sentinel-port> 哨兵的默认端口 默认是 26379
port 8001# 守护进程模式
daemonize yes# 指明日志文件名
logfile "./sentinel1.log"# 工作路径,sentinel一般指定/tmp比较简单
dir ./# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
sentinel monitor MyMaster 127.0.0.1 7001 1# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds MyMaster 1500# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout TestMaster 10000# 设置master和slaves验证密码
sentinel auth-pass TestMaster testmaster123sentinel config-epoch TestMaster 15
#除了当前哨兵, 还有哪些在监控这个master的哨兵
sentinel known-sentinel TestMaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel TestMaster 127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862

10Redis--主从复制 非常重要、一主二仆、薪火相传、反客为主、哨兵模式相关推荐

  1. Redis: Redis的主从复制(Master/Slave),一主二仆,薪火相传,反客为主,哨兵模式sentinel

    命令: slaveof 主库ip  主库端口         配置从库 info replication                         查看redis连接情况 slaveof  no ...

  2. 二十六、redis哨兵模式

    一.概述 哨兵模式本质就是自动选举老大的模式 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费时费力,还会造成一段时间内服务不可用.这不是一种推荐的方 ...

  3. Redis进阶篇主从复制----哨兵模式

    主从复制是什么 主从复制,就是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 作用 读写分离,性能扩展 容灾快速恢复 当一个从数 ...

  4. Redis07:redis的主从复制(原理与哨兵模式)、集群(搭建与它的优缺点)

    Redis的主从复制 什么的主从复制 主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,slave以读为主 能干什么? 读写分离,性能扩展 容灾快速 ...

  5. redis命令,SpringBoot整合Redis6,主从复制,哨兵模式,集群,springCache初高级应用。

    目录 1. Docker安装Redis 2. Redis的基础 2.1 redis的key命令 2.2 reids的数据结构(6.0新增的数据结构) 1. String(字符串)类型 2. List( ...

  6. Redis学习 - NoSQL简介、redis安装、redis基础知识、数据类型、持久化、订阅发布、主从复制、哨兵模式、缓存击穿和雪崩

    学习视频地址:https://www.bilibili.com/video/BV1S54y1R7SB 完结撒花,感谢狂神 文章目录 1. NoSQL 1.1 单机Mysql的演进 1.2 当今企业架构 ...

  7. 2.6_11 Redis主从复制、哨兵模式、分片集群

    相关链接 Excel目录 redis官网 redis中文网 Redis集群 1) 主从复制replication:一个master,多个slave,要几个slave取决于要求的读吞吐量[10万QPS/ ...

  8. Redis主从复制(Replication)和哨兵模式(Sentinel)

    1.主从复制 1.什么是主从复制 redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据 ...

  9. Redis主从复制(薪火相传模式 演示示例)——图解版

    目录 一.redis主从复制(薪火相传的理解) 二.Redis主从复制配置步骤概述 三.lz虚拟机配置说明 四.Redis主从复制(每台服务器的redis配置文件配置步骤) 1.配置master服务器 ...

最新文章

  1. 14种轻量级网络综述 — 主干网络篇
  2. 一场稳定、高清、流畅的大型活动直播是怎么炼成的?
  3. 设计模式学习3——装饰者模式(Decorator)
  4. python变量需要声明吗_python中可以声明变量类型吗
  5. ubuntu12.04LTS安装已经共享的打印机
  6. Git之深入解析如何将项目迁移到Git
  7. concurrent: ThreadPoolExecutor 用法
  8. 6月份美国域名总量新增近5.4万个 环比减少51%
  9. Docker精华问答 | Consul是什么?
  10. 苹果正在研发iPhone检测抑郁症功能
  11. JAVA EE 开发中 常用的API包
  12. 接口测试工具——postman
  13. jsp java mysql_jsp java mysql
  14. python百度关键词相关搜索采集,链轮查询采集相关关键词工具exe
  15. 小白的模拟电路初步学习20日打卡(18)
  16. 2018年7月18日日报
  17. 测试中case是什么
  18. 最近组织游泳社的体会
  19. oracle 监控内存和硬盘的排序比率_最好使它小于 .10,监控数据库性能的SQL
  20. cad图纸怎么看懂_老师傅教你如何看懂施工图纸,看完绝对会

热门文章

  1. 2022-2028年中国眼镜制造行业市场竞争策略及未来发展潜力报告
  2. [POI2008]枪战Maf
  3. LVGL学习——初识动画 lv_anim_t
  4. C语言排列组合(函数
  5. iOS 判断手机型号及系统版本(最新)持续更新
  6. 服务器账号登录失败怎么回事,远程连接云服务器登录失败是什么原因
  7. 《SiamMask:Fast Online Object Tracking and Segmentation:A Unifying Approach》论文笔记
  8. thingsboard2.4.3 api接口调用简单说明
  9. js中整除符号_JavaScript的算术运算符
  10. idea license server 最新可用 IntelliJ IDEA 2018.1 x64 激活 idea license server