redis cluaster (redis分布式集群)

高可用:
在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof的功能,同时当主节点down,实现类似于sentinel的自动failover的功能

redis cluaster搭建过程[6节点]:

1. 安装ruby支持
yum install ruby rubygems -y 2. 替换为国内源
使用国内源
gem sources -l
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources --remove https://rubygems.org/
gem install redis -v 3.3.3
gem sources -l 移除默认源:
gem sources -a http://mirrors.aliyun.com/rubygems/ --remove https://rubygems.org/ 添加完成后通过:
[root@k8s-master1 26380]# gem sources -l
*** CURRENT SOURCES *** http://mirrors.aliyun.com/rubygems/ #这里可以看到移除了默认源添加了一个阿里云源 3. 安装redis cluaster插件
[root@k8s-master1 26380]# gem install redis -v 3.3.3
Fetching: redis-3.3.3.gem (100%)
Successfully installed redis-3.3.3
Parsing documentation for redis-3.3.3
Installing ri documentation for redis-3.3.3
1 gem installed 4. 集群节点准备
mkdir /nosql/700{0..5} -p vim /nosql/7000/redis.conf
#--------------------------------------
port 7000
daemonize yes
pidfile /nosql/7000/redis.pid
loglevel notice
logfile "/nosql/7000/redis.log"
dbfilename dump.rdb
dir /nosql/7000
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7001/redis.conf
#--------------------------------------
port 7001
daemonize yes
pidfile /nosql/7001/redis.pid
loglevel notice
logfile "/nosql/7001/redis.log"
dbfilename dump.rdb
dir /nosql/7001
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7002/redis.conf
#--------------------------------------
port 7002
daemonize yes
pidfile /nosql/7002/redis.pid
loglevel notice
logfile "/nosql/7002/redis.log"
dbfilename dump.rdb
dir /nosql/7002
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7003/redis.conf
#--------------------------------------
port 7003
daemonize yes
pidfile /nosql/7003/redis.pid
loglevel notice
logfile "/nosql/7003/redis.log"
dbfilename dump.rdb
dir /nosql/7003
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7004/redis.conf
#--------------------------------------
port 7004
daemonize yes
pidfile /nosql/7004/redis.pid
loglevel notice
logfile "/nosql/7004/redis.log"
dbfilename dump.rdb
dir /nosql/7004
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7005/redis.conf
#--------------------------------------
port 7005
daemonize yes
pidfile /nosql/7005/redis.pid
loglevel notice
logfile "/nosql/7001/redis.log"
dbfilename dump.rdb
dir /nosql/7005
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- 配置完成后 启动节点
redis-server /nosql/7000/redis.conf
redis-server /nosql/7001/redis.conf
redis-server /nosql/7002/redis.conf
redis-server /nosql/7003/redis.conf
redis-server /nosql/7004/redis.conf
redis-server /nosql/7005/redis.conf 检查:
[root@k8s-master1 26380]# ps -ef |grep redis
root 1513 1 0 10:59 ? 00:00:00 redis-server *:7000 [cluster]
root 1515 1 0 10:59 ? 00:00:00 redis-server *:7001 [cluster]
root 1517 1 0 10:59 ? 00:00:00 redis-server *:7002 [cluster]
root 1523 1 0 10:59 ? 00:00:00 redis-server *:7003 [cluster]
root 1527 1 0 10:59 ? 00:00:00 redis-server *:7004 [cluster]
root 1529 1 0 10:59 ? 00:00:00 redis-server *:7005 [cluster]
root 1859 1261 0 11:00 pts/0 00:00:00 grep --color=auto redis #加入到集群管理:
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 加入集群后会收到询问
Can I set the above configuration? (type 'yes' to accept): yes 输入yes 即可 注意: 这里 前3个节点为主节点,后三个节点为从节点 #查询集群状态:
集群主节点状态
redis-cli -p 7000 cluster nodes | grep master [root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep master
f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001 master - 0 1600484746297 2 connected 5461-10922
21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000 myself,master - 0 0 1 connected 0-5460
da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002 master - 0 1600484746800 3 connected 10923-16383 这里查询也印证了我们说的 前三个为主节点。 集群从节点状态
redis-cli -p 7000 cluster nodes | grep slave [root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes | grep slave
ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005 slave da1ede6d05d4c754c90690ab8613e0bc80b002ef 0 1600484813136 6 connected
da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003 slave 21d16b3ccb51b444e188a2e4f344761ed5a8420f 0 1600484812129 4 connected
e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004 slave f61f106f3cf969673a39fa0e0a795b7033166d0b 0 1600484814142 5 connected

redis cluster扩容新节点

默认构建集群时它类似于服务器的硬盘槽位,默认槽位都分配好了,新增节点并不会工作,只是加入到节点了而已。
如果需要让新节点工作,则需要重新进行槽位分配。 节点扩容实战:
新增两台实例,用于扩容一个主从
mkdir /nosql/7006 -p
mkdir /nosql/7007 -p
cp /nosql/7000/redis.conf /nosql/7006/redis.conf
sed -i "s#7000#7006#g" /nosql/7006/redis.conf
cat /nosql/7006/redis.conf
#----------------------------
port 7006
daemonize yes
pidfile /nosql/7006/redis.pid
loglevel notice
logfile "/nosql/7006/redis.log"
dbfilename dump.rdb
dir /nosql/7006
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#---------------------------- cp /nosql/7000/redis.conf /nosql/7007/redis.conf
sed -i "s#7000#7007#g" /nosql/7007/redis.conf
cat /nosql/7007/redis.conf
#----------------------------
port 7007
daemonize yes
pidfile /nosql/7007/redis.pid
loglevel notice
logfile "/nosql/7007/redis.log"
dbfilename dump.rdb
dir /nosql/7007
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#---------------------------- 两台节点配置完成后启动
redis-server /nosql/7006/redis.conf
redis-server /nosql/7007/redis.conf 检查进程:
[root@k8s-master1 26380]# ps -ef|grep redis
root 1513 1 0 10:59 ? 00:00:02 redis-server *:7000 [cluster]
root 1515 1 0 10:59 ? 00:00:02 redis-server *:7001 [cluster]
root 1517 1 0 10:59 ? 00:00:02 redis-server *:7002 [cluster]
root 1523 1 0 10:59 ? 00:00:02 redis-server *:7003 [cluster]
root 1527 1 0 10:59 ? 00:00:02 redis-server *:7004 [cluster]
root 1529 1 0 10:59 ? 00:00:02 redis-server *:7005 [cluster]
root 8835 1 0 11:30 ? 00:00:00 redis-server *:7006 [cluster] #<-------新节点启动成功
root 9102 1 0 11:31 ? 00:00:00 redis-server *:7007 [cluster] #<-------新节点启动成功
root 9356 1261 0 11:32 pts/0 00:00:00 grep --color=auto redis
root 65882 1 0 Sep18 ? 00:01:17 redis-server *:6381
root 65893 1 0 Sep18 ? 00:01:17 redis-server *:6382
root 66500 1261 0 Sep18 pts/0 00:02:01 redis-sentinel *:26379 [sentinel]
root 67226 1261 0 Sep18 pts/0 00:02:03 redis-sentinel *:26380 [sentinel]
root 68930 1 0 Sep18 ? 00:01:16 redis-server *:6380 启动完成后进行节点添加,将新增的节点加入到集群并工作:
1. 将7006加入新节点,设置为主节点
redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
2. 检查状态
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes|grep master
f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001 master - 0 1600486595271 2 connected 5461-10922
21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000 myself,master - 0 0 1 connected 0-5460
f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7006 master - 0 1600486594769 0 connected <----看到已经连接到集群,但是还没做分片槽位信息
da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002 master - 0 1600486595773 3 connected 10923-16383 这里可以看到我们总槽位是16383 之前有3个节点 现在有4个节点,所以需要重新分配,使用 16384/4 [方便除整,这里就多加1进行除法计算]
[root@k8s-master1 ~]# echo 16384/4|bc
4096
也就是需要每个节点分到4096 现在需要将已经分配的槽位每个分一部分给新的主节点。 3. 重新分片[重新分片的时候建议避开业务高峰期,一面出现数据丢失问题]
[root@k8s-master1 26380]# redis-trib.rb reshard 127.0.0.1:7000 #执行重新分片
How many slots do you want to move (from 1 to 16384) 4096 <--- #手工输入分片数量 4096
What is the receiving node ID? f410ac95f665687533957933f9ddbc9d1665899a #这是扩容到哪个节点,新增的是7006 所以这里应该写70006的id
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: all #<-------------- 输入all 是从所有节点进行重新分配
...
...
Moving slot 12287 from da1ede6d05d4c754c90690ab8613e0bc80b002ef
Do you want to proceed with the proposed reshard plan (yes/no)? yes #是否接受重新分片的计划? 这里直接yes就可以了 这样分片就完成了,现在重新查看状态
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep master
f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001 master - 0 1600487849917 2 connected 6827-10922
21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000 myself,master - 0 0 1 connected 1365-5460
f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7006 master - 0 1600487848411 7 connected 0-1364 5461-6826 10923-12287
da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002 master - 0 1600487848914 3 connected 12288-16383 这里可以看到 127.0.0.1:7006 获得了其他节点分配过来的槽位信息: connected 0-1364 5461-6826 10923-12287
这说明分片成功。
0-1364 5461-6826 10923-12287 这个id 是 f410ac95f665687533957933f9ddbc9d1665899a 添加从节点是为这个主节点添加从节点。 4. 刚才添加了主节点重新分片,现在需要添加从节点:
redis-trib.rb add-node --slave --master-id f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7007 127.0.0.1:7000
这个地址就是新增的 [root@k8s-master1]# redis-trib.rb add-node --slave --master-id f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7007 127.0.0.1:7000
>>> Adding node 127.0.0.1:7007 to cluster 127.0.0.1:7000
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000
slots:1365-5460 (4096 slots) master
1 additional replica(s)
M: f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001
slots:6827-10922 (4096 slots) master
1 additional replica(s)
M: f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7006
slots:0-1364,5461-6826,10923-12287 (4096 slots) master
0 additional replica(s)
M: da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002
slots:12288-16383 (4096 slots) master
1 additional replica(s)
S: ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005
slots: (0 slots) slave
replicates da1ede6d05d4c754c90690ab8613e0bc80b002ef
S: da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003
slots: (0 slots) slave
replicates 21d16b3ccb51b444e188a2e4f344761ed5a8420f
S: e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004
slots: (0 slots) slave
replicates f61f106f3cf969673a39fa0e0a795b7033166d0b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 127.0.0.1:7007 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 127.0.0.1:7006.
[OK] New node added correctly.

redis删除节点

#1. 将需要删除节点slot移动走
redis-trib.rb reshard 127.0.0.1:7000 #2. 删除一个节点
[root@k8s-master1 26380]# redis-trib.rb reshard 127.0.0.1:7000 >>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000
slots:1365-5460 (4096 slots) master
1 additional replica(s)
S: dbb275031f92a1b3bd67b0e264076e584b8ab2f1 127.0.0.1:7007
slots: (0 slots) slave
replicates f410ac95f665687533957933f9ddbc9d1665899a
M: f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001
slots:6827-10922 (4096 slots) master
1 additional replica(s)
M: f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7006
slots:0-1364,5461-6826,10923-12287 (4096 slots) master
1 additional replica(s)
M: da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002
slots:12288-16383 (4096 slots) master
1 additional replica(s)
S: ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005
slots: (0 slots) slave
replicates da1ede6d05d4c754c90690ab8613e0bc80b002ef
S: da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003
slots: (0 slots) slave
replicates 21d16b3ccb51b444e188a2e4f344761ed5a8420f
S: e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004
slots: (0 slots) slave
replicates f61f106f3cf969673a39fa0e0a795b7033166d0b
[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)? 4096 #删除节点分片大小,上面添加的时候重新分配就是4096,这里也需要是4096
What is the receiving node ID? 21d16b3ccb51b444e188a2e4f344761ed5a8420f #这里的ID 就选择 7000 这个节点的
Source node #1: f410ac95f665687533957933f9ddbc9d1665899a # 这里是要删除的的节点ID,需要删除7006节点就写7006节点ID Source node #2:done # 这里输入done 确认设置的信息 Do you want to proceed with the proposed reshard plan (yes/no)? yes #这里输入yes,这样就完成了删除节点,它会把7006节点移动到7000节点。 #3. 删除节点信息
[root@k8s-master1 26380]# redis-trib.rb del-node 127.0.0.1:7006 f410ac95f665687533957933f9ddbc9d1665899a
>>> Removing node f410ac95f665687533957933f9ddbc9d1665899a from cluster 127.0.0.1:7006
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node. 注意: 此时7006这个节点就退出了,从ps的结果中可以看到:
[root@k8s-master1 26380]# ps -ef|grep redis
root 1513 1 0 10:59 ? 00:00:12 redis-server *:7000 [cluster]
root 1515 1 0 10:59 ? 00:00:10 redis-server *:7001 [cluster]
root 1517 1 0 10:59 ? 00:00:10 redis-server *:7002 [cluster]
root 1523 1 0 10:59 ? 00:00:06 redis-server *:7003 [cluster]
root 1527 1 0 10:59 ? 00:00:07 redis-server *:7004 [cluster]
root 1529 1 0 10:59 ? 00:00:06 redis-server *:7005 [cluster]
root 9102 1 0 11:31 ? 00:00:03 redis-server *:7007 [cluster] 主节点已经删除,此时还要删除从节点:
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep slave
dbb275031f92a1b3bd67b0e264076e584b8ab2f1 127.0.0.1:7007 slave 21d16b3ccb51b444e188a2e4f344761ed5a8420f 0 1600490142525 8 connected
ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005 slave da1ede6d05d4c754c90690ab8613e0bc80b002ef 0 1600490143027 6 connected
da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003 slave 21d16b3ccb51b444e188a2e4f344761ed5a8420f 0 1600490142021 8 connected
e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004 slave f61f106f3cf969673a39fa0e0a795b7033166d0b 0 1600490143531 5 connected 7007是从节点,还需要删除这个节点[节点ID是第一列,不要删除第四列,第四列是主节点]
[root@k8s-master1 26380]# redis-trib.rb del-node 127.0.0.1:7007 dbb275031f92a1b3bd67b0e264076e584b8ab2f1
>>> Removing node dbb275031f92a1b3bd67b0e264076e584b8ab2f1 from cluster 127.0.0.1:7007
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node. 检查:
1.查看slave节点是否有信息没删除
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep slave
ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005 slave da1ede6d05d4c754c90690ab8613e0bc80b002ef 0 1600490541551 6 connected
da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003 slave 21d16b3ccb51b444e188a2e4f344761ed5a8420f 0 1600490540548 8 connected
e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004 slave f61f106f3cf969673a39fa0e0a795b7033166d0b 0 1600490541551 5 connected 2.查看master节点是否有信息没删除
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep master
f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001 master - 0 1600490554614 2 connected 6827-10922
21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000 myself,master - 0 0 8 connected 0-6826 10923-12287
da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002 master - 0 1600490553609 3 connected 12288-16383 此时 7006 已经从主从节点都删除了

删除节点的过程概述:

1. redis-trib.rb reshard 127.0.0.1:7000  #删除一个节点
2. How many slots do you want to move (from 1 to 16384)? 4096 #删除节点分片大小,上面添加的时候重新分配就是4096,这里也需要是4096
3. What is the receiving node ID? #从哪个节点接收
4. Source node #1: #这里是要删除的的节点ID,需要删除7006节点就写7006节点ID
5. Source node #2: #这里输入done 确认设置的信息
6. Do you want to proceed with the proposed reshard plan (yes/no)? yes # 是否确认删除的节点信息?

注意,redis新增节点 删除节点都需要进行重新分配的

redis cluaster (redis分布式集群 redis分片集群)的更多相关文章

  1. redis集群之分片集群的原理和常用代理环境部署

    上篇文章刚刚介绍完redis的主从复制集群,但主从复制集群主要是为了解决redis集群的单点故障问题,通过整合哨兵能实现集群的高可用:但是却无法解决数据容量以及单节点的压力问题,所以本文继续介绍red ...

  2. mongodb集群配置分片集群

    测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 mongo01 从服务器IP地址:192.168.197.22 mongo02 从服务器IP地址: ...

  3. mongodb3.6集群搭建:分片集群认证

    上篇集群已经创建,现在加入认证. 1. 生成密钥文件每个服务器上创建路径: mkdir -p /var/lib/mongo/auth 生成64字节的密钥文件openssl rand -base64 6 ...

  4. 分布式缓存技术redis学习系列

    分布式缓存技术redis学习系列(一)--redis简介以及linux上的安装以及操作redis问题整理 分布式缓存技术redis学习系列(二)--详细讲解redis数据结构(内存模型)以及常用命令 ...

  5. 解析分布式锁之Redis实现(二)

    摘要:在前文中提及了实现分布式锁目前有三种流行方案,分别为基于数据库.Redis.Zookeeper的方案,本文主要阐述基于Redis的分布式锁,分布式架构设计如今在企业中被大量的应用,而在不同的分布 ...

  6. 分布式锁(redis/mysql)

    单台机器所能承载的量是有限的,用户的量级上万,基本上服务都会做分布式集群部署.很多时候,会遇到对同一资源的方法.这时候就需要锁,如果是单机版的,可以利用java等语言自带的并发同步处理.如果是多台机器 ...

  7. MongoDB 搭建分片集群

    在MongoDB(版本 3.2.9)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群.分片集群(S ...

  8. mongoDB研究笔记:分片集群部署

    前面几篇文章的分析复制集解决了数据库的备份与自动故障转移,但是围绕数据库的业务中当前还有两个方面的问题变得越来越重要.一是海量数据如何存储?二是如何高效的读写海量数据?尽管复制集也可以实现读写分析,如 ...

  9. Mongodb集群与分片 1

    分片集群   Mongodb中数据分片叫做chunk,它是一个Collection中的一个连续的数据记录,但是它有一个大小限制,不可以超过200M,如果超出产生新的分片.   下面是一个简单的分片集群 ...

  10. mongodb分片集群安装教程

    mongodb 集群包含副本集群,主从集群以及分片集群,分片集群比较复杂,这里测试我采用了三台机器,交差部署 blog地址:http://www.cnblogs.com/caoguo 一 .环境:#m ...

随机推荐

  1. Vue3.0里为什么要用 Proxy API 替代 defineProperty API

    一.Object.defineProperty 定义:Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象 为什么能实现响应式 ...

  2. 【笔记】Oracle 窗口函数

    Oracle 窗口函数 简单来说,窗口函数是分析函数的一种,通常可以理解成over()函数 构成:函数名①() over(partition by 分组的列名 order by 排序的列名 XXX) ...

  3. PolarDB-X 全局Binlog解读之性能篇(上)

    简介: 本篇来介绍一下PolarDB-X全局binlog在性能方面的一些设计和思考,先通过几个实际的测试案例来展示全局binlog的性能情况,然后结合这些案例来深入讲解全局binlog关于优化的故事. ...

  4. 那些你不知道的TCP冷门知识!

    简介: 最近在做数据库相关的事情,碰到了很多TCP相关的问题,新的场景新的挑战,有很多之前并没有掌握透彻的点,大大开了一把眼界,选了几个案例分享一下. 最近在做数据库相关的事情,碰到了很多TCP相关的 ...

  5. Serverless 架构模式及演进

    ​简介: Serverless 架构从使用技术上有计算,数据存储,消息通信,我们可从运维性,安全性,可靠性,可扩展性,成本几个角度来衡量架构的优劣.本文会介绍一些常见的业务场景,探讨如何使用 Serv ...

  6. [FE] jsoneditor 在 vue-router 和 vue-ssr 渲染下出现两个实例的问题

    由于 vue-router 页面是无刷新的,如果存在两次渲染,会出现如下情形. 简单粗暴的解决办法是通过判断容器中是否已经有了子节点. 此时再从其他 router link 返回就不会重复渲染了. M ...

  7. WPF 已知问题 dotnet 6 设置 InvariantGlobalization 之后将丢失默认绑定转换导致 XAML 抛出异常

    在设置了 InvariantGlobalization 为 true 之后,将会发现原本能正常工作的 XAML 可能就会抛出异常.本文将告诉大家此问题的原因 这是有开发者在 WPF 仓库上给我报告的 ...

  8. notepad运行python代码的步骤

    notepad运行python代码的步骤: 1.用notepad++打开python文件.或者新建文件,保存为.py格式. 2.在菜单栏上面有一个运行,我们点击运行->运行,或者使用快捷键F5. ...

  9. thinkphp5 关于跨域的一些坑,附上解决办法(比较全面了)

    项目背景:前端是uniapp开发的h5,后端是tp5,其他语言我觉得应该大同小异,主要是思路,本文就以这俩为例吧 1.首先在tp5的入口文件:public/index.php 在里面添加三行: // ...

  10. 使用.NET查询日出日落时间

    在WPF中,通过资源文件实现主题切换是个常见的功能,有不少文章介绍了如何实现手动切换主题.那如何实现自动切换主题呢?通常有两种机制:一是跟随系统明暗主题切换,二是像手机操作系统那样根据日出日落时间自动 ...