目前Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接

其结构特点:

1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

2、节点的fail是通过集群中超过半数的节点检测失效时才生效。

3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。

5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:

节点A覆盖0-5460;
      节点B覆盖5461-10922;
      节点C覆盖10923-16383.

A获取数据:

如果存入一个值,按照redis cluster哈希槽的算法: CRC16('key')384 = 6782。 那么就会把这个key 的存储分配到 B 上了。同样,当我连接(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据 
    
   B新增一个主节点:

 新增一个节点D,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上,我会在接下来的实践中实验。大致就会变成这样:

节点A覆盖1365-5460
    节点B覆盖6827-10922
    节点C覆盖12288-16383
    节点D覆盖0-1364,5461-6826,10923-12287

同样删除一个节点也是类似,移动完成后就可以删除这个节点了。

2、Redis Cluster主从模式

redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。

上面那个例子里, 集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。

所以我们在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。

B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。

不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。
--------------------------------------------------------
 
二、redis集群的搭建
    集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)

• 部署环境,六台redis服务器,三主三从

• 安装包,6台都安装redis
#yum -y install gcc gcc-c++
#tar -zxvf redis-4.0.8.tar.gz   //网上下载
#cd redis-4.0.8/
#make
#make install
#/redis-4.0.8/utils/install_server.sh
#/usr/local/bin/redis-server /etc/redis/6379.conf  //启动服务
---选择其中一台安装集群服务管理软件
#yum -y install ruby rubygems  //yum自带
#rpm -ivh --nodeps ruby-devel-2.0.0.648-30.el7.x86_64.rpm  //网上下载
#gem install redis-3.2.1.gem  //网上下载

• 修改配置文件
#vim /etc/redis/redis.conf
bind IP 地址                                 // 只写物理接口 IP 地址
daemonize yes                       // 守护进程方式运行
port xxxx                          // 端口号不要使用默认的 6379
cluster-enabled yes               // 开启集群
cluster-config-file nodes.conf   // 集群的配置文件不要使用默认的名称
cluster-node-timeout 5000       // 请求超时 5 秒

• 创建redis集群
#cd /tmp/redis-4.0.8/src/   //进入到解压后的redis-4.0.8里的src目录下
#./redis-trib.rb create --replicas 1 192.168.4.51:6351 192.168.4.52:6352 192.168.4.53:6353 192.168.4.54:6354 192.168.4.55:6355 192.168.4.56:6356  
//create --replicas 1表示创建一个redis集群   其中--replicas 1 表示 自动为每一个 master 节点分配一个 slave 节点
[root@host51 ~]# /tmp/redis-4.0.8/src/redis-trib.rb create --replicas 1 192.168.4.51:6351 192.168.4.52:6352 192.168.4.53:6353 192.168.4.54:6354 192.168.4.55:6355 192.168.4.56:6356
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.4.51:6351
192.168.4.52:6352
192.168.4.53:6353
Adding replica 192.168.4.55:6355 to 192.168.4.51:6351
Adding replica 192.168.4.56:6356 to 192.168.4.52:6352
Adding replica 192.168.4.54:6354 to 192.168.4.53:6353
M: c40ddf7cf748d0d903b3e8dce415790ec36087c2 192.168.4.51:6351
   slots:0-5460 (5461 slots) master
M: 6c80c08f729deda1e8a9425339eb5aec3315158c 192.168.4.52:6352
   slots:5461-10922 (5462 slots) master
M: 1dc6fe4c914b6436b72787a283c881b6d374442c 192.168.4.53:6353
   slots:10923-16383 (5461 slots) master
S: 7b8d034b1e9b842dcdc75cf317aef925476fb194 192.168.4.54:6354
   replicates 1dc6fe4c914b6436b72787a283c881b6d374442c
S: 0fa48365a5b6eeec79ca1db5cfe804ab8d53ddd5 192.168.4.55:6355
   replicates c40ddf7cf748d0d903b3e8dce415790ec36087c2
S: 30a497290d03eb92bf326514e943341ff01c98f4 192.168.4.56:6356
   replicates 6c80c08f729deda1e8a9425339eb5aec3315158c
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 192.168.4.51:6351)
M: c40ddf7cf748d0d903b3e8dce415790ec36087c2 192.168.4.51:6351
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 0fa48365a5b6eeec79ca1db5cfe804ab8d53ddd5 192.168.4.55:6355
   slots: (0 slots) slave
   replicates c40ddf7cf748d0d903b3e8dce415790ec36087c2
M: 6c80c08f729deda1e8a9425339eb5aec3315158c 192.168.4.52:6352
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 30a497290d03eb92bf326514e943341ff01c98f4 192.168.4.56:6356
   slots: (0 slots) slave
   replicates 6c80c08f729deda1e8a9425339eb5aec3315158c
S: 7b8d034b1e9b842dcdc75cf317aef925476fb194 192.168.4.54:6354
   slots: (0 slots) slave
   replicates 1dc6fe4c914b6436b72787a283c881b6d374442c
M: 1dc6fe4c914b6436b72787a283c881b6d374442c 192.168.4.53:6353
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

• 测试集群
 -在其中任意一台上存储数据 ,在其他任意一台上都可以获取数据,-c集群模式登陆
[root@host52 /]# redis-cli -c -p 6352 -h 192.168.4.52   //登陆时必须加-c使用集群模式创建或查看变量
192.168.4.51:6351> set tt nice
-> Redirected to slot [14990] located at 192.168.4.53:6353
OK
------
[root@host55 6379]# redis-cli -c -p 6355 -h 192.168.4.55
192.168.4.55:6355> get tt
-> Redirected to slot [14990] located at 192.168.4.53:6353
"nice"

退出redis集群状态重生加入新redis集群(清空数据\删除nodes.conf)
1--清空数据
root@host53 6379]# redis-cli -p 6353 -h 192.168.4.53
192.168.4.53:6353> FLUSHALL
OK
192.168.4.53:6353> SAVE
OK
192.168.4.53:6353> exit
2--删除nodes.conf
[root@host53 ~]# cd /var/lib/redis/6379/
[root@host53 6379]# ls
dump.rdb  nodes.conf
[root@host53 6379]# rm -rf nodes.conf 
1--重启服务
[root@host55 6379]# redis6379 restart
Stopping ...
Redis stopped
Starting Redis server...

3--集群管理
redis-cli 命令
• 查看命令帮助
– redis-cli -h
• 常用选项
– -h IP 地址
– -p 端口
– -c
------------------------
[root@host51 ~]# find / -type f -name redis-trib.rb
/tmp/redis-4.0.8/src/redis-trib.rb
• 语法格式
– Redis-trib.rb
选项 参数
• 选项
1、create:创建集群
2、check:检查集群
3、info:查看集群信息
4、fix:修复集群
5、reshard:在线迁移slot
6、rebalance:平衡集群节点slot数量
7、add-node:将新节点加入集群
8、del-node:从集群中删除节点
9、set-timeout:设置集群节点间心跳连接的超时时间
10、call:在集群全部节点上执行命令
11、import:将外部redis数据导入集群
-------------------------
-----------------------------------------------------redis cluster命令
redis cluster命令

集群(cluster)  
cluster info       打印集群的信息
cluster nodes   列出集群当前已知的所有节点(node),以及这些节点的相关信息   
节点(node)  
cluster meet <ip> <port>       将ip和port所指定的节点添加到集群当中,让它成为集群的一份子  
cluster forget <node_id>        从集群中移除node_id指定的节点
cluster replicate <node_id>   将当前节点设置为node_id指定的节点的从节点
cluster saveconfig                   将节点的配置文件保存到硬盘里面
cluster slaves <node_id>       列出该slave节点的master节点
cluster set-config-epoch        强制设置configEpoch 
槽(slot)  
cluster addslots <slot> [slot ...]                         将一个或多个槽(slot)指派(assign)给当前节点
cluster delslots <slot> [slot ...]                          移除一个或多个槽对当前节点的指派 
cluster flushslots                                                移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点 
cluster setslot <slot> node <node_id>            将槽slot指派给node_id指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派 
cluster setslot <slot> migrating <node_id>   将本节点的槽slot迁移到node_id指定的节点中  
cluster setslot <slot> importing <node_id>   从node_id 指定的节点中导入槽slot到本节点 
cluster setslot <slot> stable                             取消对槽slot的导入(import)或者迁移(migrate) 
键(key)  
cluster keyslot <key>                                       计算键key应该被放置在哪个槽上  
cluster countkeysinslot <slot>                         返回槽slot目前包含的键值对数量 
cluster getkeysinslot <slot> <count>              返回count个slot槽中的键
其它
cluster myid       返回节点的ID
cluster slots       返回节点负责的slot
cluster reset      重置集群,慎用

redis cluster配置
cluster-enabled yes
如果配置yes则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例。

cluster-config-file nodes-6379.conf
虽然此配置的名字叫"集群配置文件",但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
 
cluster-node-timeout 15000
这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还是不可达,则用它的从节点将启动故障迁移,升级成主节点。注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求。一般设置为15秒即可。

cluster-slave-validity-factor 10
如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移。假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点。注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。

cluster-migration-barrier 1
主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。更详细介绍可以看本教程后面关于副本迁移到部分。

cluster-require-full-coverage yes
在部分key所在的节点不可用时,如果此参数设置为"yes"(默认值), 则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的key提供读操作。
-----------------------------------------------------redis cluster命令

----查看状态
[root@host51 ~]# redis-cli -c -p 6351 -h 192.168.4.51  //-c管理集群模式登陆
192.168.4.51:6351>cluster info  //查看集群信息
....
192.168.4.51:6351>cluster nodes  //查看本机信息
...
[root@host51 src]# /tmp/redis-4.0.8/src/redis-trib.rb check 192.168.4.56:6356 //查看节点状态

---将新主机添加到集群中
/tmp/redis-4.0.8/src/redis-trib.rb add-node 新主机 Ip: 端口 192.168.4.51:6351
#cp /tmp/redis-4.0.8/src/redis-trib.rb /sbin/
[root@host51 src]# redis-trib.rb check 192.168.4.57:6357 
>>> Performing Cluster Check (using node 192.168.4.57:6357)
M: f6e0f4c0a0f44e60e0541e21fb942f23667159a0 192.168.4.57:6357
   slots: (0 slots) master
   0 additional replica(s)
S: 7b8d034b1e9b842dcdc75cf317aef925476fb194 192.168.4.54:6354
   slots: (0 slots) slave
   replicates 1dc6fe4c914b6436b72787a283c881b6d374442c
S: 0fa48365a5b6eeec79ca1db5cfe804ab8d53ddd5 192.168.4.55:6355
   slots: (0 slots) slave
   replicates c40ddf7cf748d0d903b3e8dce415790ec36087c2
S: 6c80c08f729deda1e8a9425339eb5aec3315158c 192.168.4.52:6352
   slots: (0 slots) slave
   replicates 30a497290d03eb92bf326514e943341ff01c98f4
M: 30a497290d03eb92bf326514e943341ff01c98f4 192.168.4.56:6356
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: c40ddf7cf748d0d903b3e8dce415790ec36087c2 192.168.4.51:6351
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 1dc6fe4c914b6436b72787a283c881b6d374442c 192.168.4.53:6353
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

----对集群重新分片reshard
[root@host57 6379]# redis-cli -c -p 6357 -h 192.168.4.57
192.168.4.57:6357> CLUSTER NODES    //添加完后查看信息,当成主了,但没有分配有位置,这时要重新切片
7b8d034b1e9b842dcdc75cf317aef925476fb194 192.168.4.54:6354@16354 slave 1dc6fe4c914b6436b72787a283c881b6d374442c 0 1528529256572 3 connected
0fa48365a5b6eeec79ca1db5cfe804ab8d53ddd5 192.168.4.55:6355@16355 slave c40ddf7cf748d0d903b3e8dce415790ec36087c2 0 1528529256000 1 connected
f6e0f4c0a0f44e60e0541e21fb942f23667159a0 192.168.4.57:6357@16357 myself,master - 0 1528529254000 0 connected
6c80c08f729deda1e8a9425339eb5aec3315158c 192.168.4.52:6352@16352 slave 30a497290d03eb92bf326514e943341ff01c98f4 0 1528529255570 7 connected
30a497290d03eb92bf326514e943341ff01c98f4 192.168.4.56:6356@16356 master - 0 1528529256071 7 connected 5461-10922
c40ddf7cf748d0d903b3e8dce415790ec36087c2 192.168.4.51:6351@16351 master - 0 1528529255067 1 connected 0-5460
1dc6fe4c914b6436b72787a283c881b6d374442c 192.168.4.53:6353@16353 master - 0 1528529256072 3 connected 10923-16383
-----------
//查看到自己的ID号:f6e0f4c0a0f44e60e0541e21fb942f23667159a0

[root@host51 src]# redis-trib.rb reshard 192.168.4.51:6351
....
How many slots do you want to move (from 1 to 16384)? 4000   //询问要分配多少个位置给新主
.....
What is the receiving node ID? f6e0f4c0a0f44e60e0541e21fb942f23667159a0     //填定刚添加的57新主节点ID
.....
Source node #1:all  //输入all,从各个主那里拆分些位置给新主
.......
# ./redis-trib.rb add-node --slave --master-id id 值

----添加从节点
# ./redis-trib.rb add-node --slave --master-id id值 从节点 ip: 端口 192.168.4.51:6351
[root@host51 src]# redis-trib.rb add-node --slave 192.168.4.58:6358 192.168.4.57:6357
....

--移除从节点,
# redis-trib.rb del-node 192.168.4.51:6351 被移除节点主机 id
[root@host51 src]# redis-trib.rb del-node 192.168.4.58:6358 eb35b17e51876756de9a66d444ea474c883ea066
>>> Removing node eb35b17e51876756de9a66d444ea474c883ea066 from cluster 192.168.4.58:6358
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

--移除主节点
--->首先要先移除这个主节点上的位置

[root@host51 src]# redis-trib.rb reshard 192.168.4.51:6357 (任意写一台)
>>> Performing Cluster Check (using node 192.168.4.57:6357)
M: f6e0f4c0a0f44e60e0541e21fb942f23667159a0 192.168.4.57:6357
   slots:0-1332,5461-6794,10923-12255 (4000 slots) master
   0 additional replica(s)
S: 7b8d034b1e9b842dcdc75cf317aef925476fb194 192.168.4.54:6354
   slots: (0 slots) slave
   replicates 1dc6fe4c914b6436b72787a283c881b6d374442c
S: 0fa48365a5b6eeec79ca1db5cfe804ab8d53ddd5 192.168.4.55:6355
   slots: (0 slots) slave
   replicates c40ddf7cf748d0d903b3e8dce415790ec36087c2
S: 6c80c08f729deda1e8a9425339eb5aec3315158c 192.168.4.52:6352
   slots: (0 slots) slave
   replicates 30a497290d03eb92bf326514e943341ff01c98f4
M: 30a497290d03eb92bf326514e943341ff01c98f4 192.168.4.56:6356
   slots:6795-10922 (4128 slots) master
   1 additional replica(s)
M: c40ddf7cf748d0d903b3e8dce415790ec36087c2 192.168.4.51:6351
   slots:1333-5460 (4128 slots) master
   1 additional replica(s)
M: 1dc6fe4c914b6436b72787a283c881b6d374442c 192.168.4.53:6353
   slots:12256-16383 (4128 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4000 //填写要移出多个位置
What is the receiving node ID? c40ddf7cf748d0d903b3e8dce415790ec36087c2   //位置移动哪台主节点上,
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1:f6e0f4c0a0f44e60e0541e21fb942f23667159a0   //要移主节点的ID
Source node #2:done   //done表示就一个id
...
Do you want to proceed with the proposed reshard plan (yes/no)? yes
...

----------redis 清缓存

[root@user_fitcome_bak shell]# redis-cli -h 172.17.171.10 -p 6388 -a Fitcom2015jiankangyun123456QWERTyuiop
172.17.171.10:6388> dbsize
(integer) 8496
172.17.171.10:6388> config set stop-writes-on-bgsave-error no
OK
172.17.171.10:6388> FLUSHALL
OK
172.17.171.10:6388> quit

Redis详细集群搭建管理_2018_lcf相关推荐

  1. 【Docker之Swarm详细讲解Swarm集群搭建管理节点工作节点Raft一致性协议overlay网络Docker结合Swarm部署WordPress个人博客实战】

    一.知识回顾 之前的内容都帮你整理好了,在这里哟! [0.Docker相关目录文章整理,可自行查看,包含多节内容] [1.Docker详细安装部署&阿里镜像地址配置] [2.Docker架构& ...

  2. Linux 系列(三)——Redis 分布式集群搭建

     在Redis的安装和部署(Linux)一文中详细介绍了在Linux环境中搭建Redis服务,本文将介绍关于Redis分布式 集群搭建细节. 一.Redis集群架构 1.Redis集群架构图 蓝色 ...

  3. Redis 主从集群搭建及哨兵模式配置

    Redis 主从集群搭建及哨兵模式配置 最近搭建了redis集群及哨兵模式,为方便以后查看特此记录下来: 1.Redis安装 2.主从架构 2.1 Redis主从架构图 2.2Redis主从结构搭建 ...

  4. redis docker 集群搭建

    redis docker 集群搭建 1. 安装镜像 docker pull redis:latest 2. 创建conf模板和脚本 # 创建模板目录 mkdir /data/redis_conf# 创 ...

  5. Redis主从集群搭建及其原理

    Redis主从集群搭建及其原理 1.Redis主从 1.1.搭建主从架构 1.2.准备实例和配置 1.3.启动 1.4.开启主从关系 1.5.测试 2.主从数据同步原理 2.1.全量同步 2.2.增量 ...

  6. Redis 分片集群搭建

    Redis 分片集群模式 主从和哨兵可以解决高可用.高并发读的问题.但是依然有两个问题没有解决: 海量数据存储问题,单台服务的磁盘存储终究是有瓶颈: master 负责写操作,高并发写情况下,单台 m ...

  7. Ubuntu 16.04下Redis Cluster集群搭建(官方原始方案)

    前提:先安装好Redis,参考:http://www.cnblogs.com/EasonJim/p/7599941.html 说明:Redis Cluster集群模式可以做到动态增加节点和下线节点,使 ...

  8. Redis 分布式集群搭建2022版本+密码(linux环境)

    Linux环境 安装 Redis-6.2.6 配置运行_01 https://gblfy.blog.csdn.net/article/details/105583077 文章目录 一.节点分布总览 二 ...

  9. Redis服务器集群搭建

    Redis简介 Redis(Remote Dictionary Server 远程字典服务器) -----是一款高性能分布式内存数据库 -----支持数据持久化(定期把内存里的数据存储到硬盘) --- ...

最新文章

  1. 工具箱支持汽车质量人工智能
  2. win7系统下载 ghost win7 Sp1 64位纯净3月版
  3. JavaScript | 声明数组并在每个循环中使用的代码
  4. 【TensorFlow】TensorFlow函数精讲之tf.truncated_normal()
  5. Codeforces 650 D. Zip-line
  6. 【python】matplotlib生成散点矩阵图
  7. 26秒!全球销量第一的AI音箱就被腾讯黑掉了,然后变身窃听器
  8. IC设计EDA软件虚拟机环境配置与安装教程
  9. Linux系统之下的基本gdb调试
  10. Linux网络命令合集
  11. 2021年西电计算机学院软专复试问题总结
  12. 遥感中的数字量化值DN, 辐射亮度Radiance, 反射率Reflectance,发射率Emissive的意义
  13. WAV音乐文件无法修改标题
  14. 基于Neo4j实现数据血缘管理
  15. mysql日期 select_MySQL_MySql日期查询语句详解,使用DATE_FORMAT方法SELECT * FROM `le - phpStudy...
  16. 【自制小工具】快速批量查询IP归属地(自动去重、按国内外汇总,并智能识别出错误IP)
  17. win10安装wsl2
  18. [工具使用]Wireshark
  19. SQL行列转置,汇总再揭
  20. 游戏感:虚拟感觉的游戏设计师指南——第十八章 我想做的游戏

热门文章

  1. python十进制小数转二进制_关于十进制小数转二进制的入门教程
  2. 亚马逊登陆显示服务器出错,亚马逊登录不上去为什么?是因为被封号了吗?
  3. 饥荒进入服务器一直连接,饥荒进别人的服务意识为什么一直在连接中 | 手游网游页游攻略大全...
  4. html expires缓存,nginx优化:使用expires在浏览器端缓存静态文件
  5. gparted分区教程
  6. 苹果、微软等巨头107道机器学习面试题/贪心学院
  7. Vue 中的表格操作
  8. HttpEntity的使用
  9. shell脚本中单引号和双引号的区别
  10. 详解 Serverless 架构的 6 大应用场景