当前位置: 首页 > news >正文

redis-cluster 创建及监控

集群命令

cluster info:打印集群的信息。
cluster nodes:列出集群当前已知的所有节点(node)的相关信息。
cluster  meet <ip> <port>:将ip和port所指定的节点添加到集群当中。
cluster addslots <slot> [slot ...]:将一个或多个槽(slot)指派(assign)给当前节点。
cluster delslots <slot> [slot ...]:移除一个或多个槽对当前节点的指派。
cluster slots:列出槽位、节点信息。
cluster slaves <node_id>:列出指定节点下面的从节点信息。 比如:  cluster slaves 11f9169577352c33d85ad0d1ca5f5bf0deba3209  这个实际查的是nodes.conf
cluster replicate <node_id>:将当前节点设置为指定节点的从节点。
cluster saveconfig:         手动执行命令保存保存集群的配置文件,集群默认在配置修改的时候会自动保存配置文件。
cluster keyslot <key>:      列出key被放置在哪个槽上。 例如:cluster keyslot 9223372036854742675
cluster flushslots:         移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster countkeysinslot <slot>:      返回槽目前包含的键值对数量。
cluster getkeysinslot <slot槽号> <key的数量>:返回count个槽中的键。  比如:cluster getkeysinslot 202 3   
cluster setslot <slot> node <node_id> 将槽指派给指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派。  
cluster setslot <slot> migrating <node_id> 将本节点的槽迁移到指定的节点中。  
cluster setslot <slot> importing <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。  
cluster setslot <slot> stable 取消对槽 slot 的导入(import)或者迁移(migrate)。 
cluster failover:      手动进行故障转移。
cluster forget <node_id>: 从集群中移除指定的节点,这样就无法完成握手,过期时为60s,60s后两节点又会继续完成握手。
cluster reset [HARD|SOFT]:重置集群信息,soft是清空其他节点的信息,但不修改自己的id,hard还会修改自己的id,不传该参数则使用soft方式。
cluster count-failure-reports <node_id>:列出某个节点的故障报告的长度。
cluster SET-CONFIG-EPOCH: 设置节点epoch,只有在节点加入集群前才能设置。

集群环境搭建:

搭建集群至少需要6台服务器或虚拟机,如果想要搭建测试可以根据端口号模拟服务器虚拟运行6个redis实例。

(1)下载redis安装包,编译安装,指定目录/usr/local/redis/
(2)创建/usr/local/redis-cluster/目录,然后把安装目录下的bin目录复制到redis-cluster/下重命名为redis01~06
(3)修改配置文件#bind 127.0.0.1 注释,允许其他ip访问
protected-mode no # 改为no; yes :保护模式,只允许本地链接,no :保护模式关闭
port 7001/7002/7003/7004/7005/7006 # 六个配置文件分别配置不同端口
daemonize: yes # 后台运行
masterauth 1234 # 主机密码
requirepass 1234 # 本机密码
cluster-enabled yes # 开启集群
cluster-enabled cluster-config-file nodes-7001.conf # 集群配置文件;集群创建成功会自动生成不配置默认nodes.conf
cluster-node-timeout 15000 # 节点失联时间,超过该时间(毫秒),集群自动进行主从切换。
appendonly:yes # 开启AOF持久化
(4)创建集群,中途会有个提示,输入yes回车即可/usr/local/redis/bin/redis-cli --cluster create --cluster-replicas 1 182.254.134.174:7001 182.254.134.174:7002 182.254.134.174:7003 182.254.134.174:7004 182.254.134.174:7005 182.254.134.174:7006 -a 1234
[root@VM-0-12-centos /]# cd /usr/local/redis
[root@VM-0-12-centos redis]# wget https://github.com/redis/redis/archive/7.0.4.tar.gz
[root@VM-0-12-centos redis]# tar -xzvf 7.0.4.tar.gz
[root@VM-0-12-centos redis]# ll
total 2932
-rw-r--r-- 1 root root 2994242 Aug  8 17:03 7.0.4.tar.gz
drwxrwxr-x 8 root root    4096 Jul 18 21:04 redis-7.0.4
[root@VM-0-12-centos redis]# cd redis-7.0.4
[root@VM-0-12-centos redis]# make && make install PREFIX=/usr/local/redis  # 指定安装目录,会在redis目录下生成一个bin/目录,如果不指定安装目录会在 redis-7.0.4/src/ 生成启动文件,我这里为了自己操作方便些直接在 redis/bin 目录下操作
[root@VM-0-12-centos redis]# cd ..
[root@VM-0-12-centos redis]# ls
7.0.4.tar.gz  bin  redis-7.0.4
[root@VM-0-12-centos redis]# cd bin/
[root@VM-0-12-centos bin]# ls
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server
[root@VM-0-12-centos bin]# cp ../redis-7.0.4/redis.conf ./
[root@VM-0-12-centos bin]# ls
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis.conf  redis-sentinel  redis-server
[root@VM-0-12-centos bin]# vim ./redis.conf # 修改daemonize 的值为 yes,开启后台启动
[root@VM-0-12-centos bin]# ./redis-server ./redis.conf
[root@VM-0-12-centos bin]# ./redis-cli
127.0.0.1:6379>
root@VM-0-12-centos bin]# cd ../..
[root@VM-0-12-centos local]# mkdir redis-cluster
[root@VM-0-12-centos local]# cd redis-cluster/
[root@VM-0-12-centos redis-cluster]# cp -r /usr/local/redis/bin/ ./redis01/
[root@VM-0-12-centos local]# rm -rf ./redis01/dump.rdb # 删除redis01目录下的快照文件dump.rdb
[root@VM-0-12-centos redis-cluster]# vim ./redis01/redis.conf
#bind 127.0.0.1 注释,允许其他ip访问
protected-mode no
port 7001
masterauth 1234
requirepass 1234 #最好设置一下密码
cluster-enabled yes
cluster-enabled yes 打开集群模式
cluster-config-file nodes-7001.conf 设定节点配置文件名
cluster-node-timeout 15000
appendonly:yes
[root@VM-0-12-centos redis-cluster]# cp -r ./redis01/ ./redis02/
[root@VM-0-12-centos redis-cluster]# cp -r ./redis01/ ./redis03/
[root@VM-0-12-centos redis-cluster]# cp -r ./redis01/ ./redis04/
[root@VM-0-12-centos redis-cluster]# cp -r ./redis01/ ./redis05/
[root@VM-0-12-centos redis-cluster]# cp -r ./redis01/ ./redis06/
[root@VM-0-12-centos redis-cluster]# vim ./redis01/redis.conf # 逐个修改端口号
[root@VM-0-12-centos redis-cluster]# vim start-all.sh # 创建启动文件,也可手动启动所有服务
cd redis01
./redis-server ./redis.conf
cd ..
cd redis02
./redis-server ./redis.conf
cd ..
cd redis03
./redis-server ./redis.conf
cd ..
cd redis04
./redis-server ./redis.conf
cd ..
cd redis05
./redis-server ./redis.conf
cd ..
cd redis06
./redis-server ./redis.conf
cd ..
[root@VM-0-12-centos redis-cluster]# vim stop-all.sh # 创建关闭文件,也可手动停止所有服务
cd redis01
./redis-cli -h 127.0.0.1 -p 7001 -a 1234 shutdown
cd ..
cd redis02
./redis-cli -h 127.0.0.1 -p 7002 -a 1234 shutdown
cd ..
cd redis03
./redis-cli -h 127.0.0.1 -p 7003 -a 1234 shutdown
cd ..
cd redis04
./redis-cli -h 127.0.0.1 -p 7004 -a 1234 shutdown
cd ..
cd redis05
./redis-cli -h 127.0.0.1 -p 7005 -a 1234 shutdown
cd ..
cd redis06
./redis-cli -h 127.0.0.1 -p 7006 -a 1234 shutdown
cd ..
[root@VM-0-12-centos redis-cluster]# chmod +x start-all.sh
[root@VM-0-12-centos redis-cluster]# chmod +x stop-all.sh
[root@VM-0-12-centos redis-cluster]# ./start-all.sh
[root@VM-0-12-centos redis-cluster]# ps aux | grep redis
root     17885  0.1  0.1 163152  3724 ?        Ssl  17:52   0:01 ./redis-server *:6379
root     23399  0.0  0.1 165712  3664 ?        Ssl  18:20   0:00 ./redis-server *:7001 [cluster]
root     23401  0.0  0.1 165712  3660 ?        Ssl  18:20   0:00 ./redis-server *:7002 [cluster]
root     23403  0.0  0.1 165712  3664 ?        Ssl  18:20   0:00 ./redis-server *:7003 [cluster]
root     23405  0.0  0.1 165712  3664 ?        Ssl  18:20   0:00 ./redis-server *:7004 [cluster]
root     23411  0.0  0.1 171856  3664 ?        Ssl  18:20   0:00 ./redis-server *:7005 [cluster]
root     23413  0.0  0.1 165712  3672 ?        Ssl  18:20   0:00 ./redis-server *:7006 [cluster]
root     23495  0.0  0.0 112816   976 pts/0    R+   18:21   0:00 grep --color=auto redis
[root@VM-0-12-centos redis-cluster]# ls
redis01  redis02  redis03  redis04  redis05  redis06  start-all.sh  stop-all.sh
[root@VM-0-12-centos redis-cluster]# /usr/local/redis/bin/redis-cli --cluster create --cluster-replicas 1 182.254.134.174:7001 182.254.134.174:7002 182.254.134.174:7003 182.254.134.174:7004 182.254.134.174:7005 182.254.134.174:7006 -a 1234
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 182.254.134.174:7005 to 182.254.134.174:7001
Adding replica 182.254.134.174:7006 to 182.254.134.174:7002
Adding replica 182.254.134.174:7004 to 182.254.134.174:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: e9750b2aa5a23b0d5e79e98b3a61c6f97a69f01d 182.254.134.174:7001slots:[0-5460] (5461 slots) master
M: 1194702cf2b7ef4f5d5e7854f526aa60d47f2577 182.254.134.174:7002slots:[5461-10922] (5462 slots) master
M: b120e1a401f11a06f8d81f19df2607c71c5cf9df 182.254.134.174:7003slots:[10923-16383] (5461 slots) master
S: 28362fb68d33eb50322f514daf4e7a447e3eccb3 182.254.134.174:7004replicates 1194702cf2b7ef4f5d5e7854f526aa60d47f2577
S: 52b90d0718c06990de002dbe00be512c0f4eccd1 182.254.134.174:7005replicates b120e1a401f11a06f8d81f19df2607c71c5cf9df
S: 2aedbda7dadc48e545ec0870b7d3585bb4637c47 182.254.134.174:7006replicates e9750b2aa5a23b0d5e79e98b3a61c6f97a69f01d
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 182.254.134.174:7001)
M: e9750b2aa5a23b0d5e79e98b3a61c6f97a69f01d 182.254.134.174:7001slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 1194702cf2b7ef4f5d5e7854f526aa60d47f2577 182.254.134.174:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 2aedbda7dadc48e545ec0870b7d3585bb4637c47 182.254.134.174:7006slots: (0 slots) slavereplicates e9750b2aa5a23b0d5e79e98b3a61c6f97a69f01d
M: b120e1a401f11a06f8d81f19df2607c71c5cf9df 182.254.134.174:7003slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 28362fb68d33eb50322f514daf4e7a447e3eccb3 182.254.134.174:7004slots: (0 slots) slavereplicates 1194702cf2b7ef4f5d5e7854f526aa60d47f2577
S: 52b90d0718c06990de002dbe00be512c0f4eccd1 182.254.134.174:7005slots: (0 slots) slavereplicates b120e1a401f11a06f8d81f19df2607c71c5cf9df
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@VM-0-12-centos redis-cluster]#

模拟主机宕机情况,看看是否自动 slave自动升为master

[root@VM-0-12-centos redis-cluster]# ./redis01/redis-cli -p 7001 -a 1234
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:7001> 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:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:886
cluster_stats_messages_pong_sent:887
cluster_stats_messages_sent:1773
cluster_stats_messages_ping_received:882
cluster_stats_messages_pong_received:886
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:1773
total_cluster_links_buffer_limit_exceeded:0
127.0.0.1:7001> cluster nodes
78b3bb404c37850c1cb7409b6d1fd1d994ee2582 182.254.134.174:7003@17003 master - 0 1660036015000 3 connected 10923-16383
0238999b8de448562d28eb23f7be491f0603afe5 182.254.134.174:7005@17005 slave 78b3bb404c37850c1cb7409b6d1fd1d994ee2582 0 1660036017989 3 connected
cc079b10ae2ff6e0870250beb91be5f0a8d5fda2 182.254.134.174:7002@17002 master - 0 1660036016986 2 connected 5461-10922
232fb95877a5f2b3093b1f7d94b632c10f55c976 172.17.0.12:7001@17001 myself,master - 0 1660036015000 1 connected 0-5460
532e2e3322dc71f281349d18d562a2a00d201b5c 182.254.134.174:7006@17006 slave 232fb95877a5f2b3093b1f7d94b632c10f55c976 0 1660036016000 1 connected
2e939c53fbc695e136bd0e63a07d6f86f9e25cb3 182.254.134.174:7004@17004 slave cc079b10ae2ff6e0870250beb91be5f0a8d5fda2 0 1660036015982 2 connected

重新开一个ssh远程连接,连接7002服务,关闭redis,等待15秒

[root@VM-0-12-centos redis-cluster]# ./redis02/redis-cli -p 7002 -a 1234
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:7002> shutdown

再次查看节点信息,会发现7004已经已经自动升为master

127.0.0.1:7001> cluster nodes
78b3bb404c37850c1cb7409b6d1fd1d994ee2582 182.254.134.174:7003@17003 master - 0 1660036206861 3 connected 10923-16383
0238999b8de448562d28eb23f7be491f0603afe5 182.254.134.174:7005@17005 slave 78b3bb404c37850c1cb7409b6d1fd1d994ee2582 0 1660036204840 3 connected
cc079b10ae2ff6e0870250beb91be5f0a8d5fda2 182.254.134.174:7002@17002 master,fail - 1660036178557 1660036172498 2 disconnected
232fb95877a5f2b3093b1f7d94b632c10f55c976 172.17.0.12:7001@17001 myself,master - 0 1660036203000 1 connected 0-5460
532e2e3322dc71f281349d18d562a2a00d201b5c 182.254.134.174:7006@17006 slave 232fb95877a5f2b3093b1f7d94b632c10f55c976 0 1660036207000 1 connected
2e939c53fbc695e136bd0e63a07d6f86f9e25cb3 182.254.134.174:7004@17004 master - 0 1660036207872 7 connected 5461-10922
127.0.0.1:7001>

操作中遇到的问题:

1、[ERR] Node 182.254.134.174:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
[root@VM-0-12-centos redis-cluster]# /usr/local/redis/bin/redis-cli --cluster create --cluster-replicas 1 182.254.134.174:7001 182.254.134.174:7002 182.254.134.174:7003 182.254.134.174:7004 182.254.134.174:7005 182.254.134.174:7006 -a 1234
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
[ERR] Node 182.254.134.174:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

原因:上面的命令只能在新创健集群的时候执行一次,目的是为了建立内部各个节点的对应关系,比如主从关系,这些关系仅且只能在一个集群中初始化时对应一次;
解决办法:删除aof,rdb,nodes.conf文件重新启动,我写了一个清除文件脚本 clear.sh

cd ..
cd redis02
rm -f nodes-7002.conf
rm -f nodes.conf
rm -f dump.rdb
rm -f appendonly.aof
cd ..
cd redis03
rm -f nodes-7003.conf
rm -f nodes.conf
rm -f dump.rdb
rm -f appendonly.aof
cd ..
cd redis04
rm -f nodes-7004.conf
rm -f nodes.conf
rm -f dump.rdb
rm -f appendonly.aof
cd ..
cd redis05
rm -f nodes-7005.conf
rm -f nodes.conf
rm -f dump.rdb
rm -f appendonly.aof
cd ..
cd redis06
rm -f nodes-7006.conf
rm -f nodes.conf
rm -f dump.rdb
rm -f appendonly.aof
cd ..
[root@VM-0-12-centos redis-cluster]# ./clear.sh
[root@VM-0-12-centos redis-cluster]# ./start-all.sh
/usr/local/redis/bin/redis-cli --cluster create --cluster-replicas 1 182.254.134.174:7001 182.254.134.174:7002 182.254.134.174:7003 182.254.134.174:7004 182.254.134.174:7005 182.254.134.174:7006 -a 1234
正常启动,重复代码就不粘贴了...
  1. 0@0 master,fail,noaddr - 1660036178557 1660036172498 2 disconnected

7004自动升为master后重新启动7002查看节点状态后发现,发现7002已脱离集群,且id都已发生了变化

127.0.0.1:7001> cluster nodes
78b3bb404c37850c1cb7409b6d1fd1d994ee2582 182.254.134.174:7003@17003 master - 0 1660039460000 3 connected 10923-16383
0238999b8de448562d28eb23f7be491f0603afe5 182.254.134.174:7005@17005 slave 78b3bb404c37850c1cb7409b6d1fd1d994ee2582 0 1660039461528 3 connected
cc079b10ae2ff6e0870250beb91be5f0a8d5fda2 :0@0 master,fail,noaddr - 1660036178557 1660036172498 2 disconnected
232fb95877a5f2b3093b1f7d94b632c10f55c976 172.17.0.12:7001@17001 myself,master - 0 1660039460000 1 connected 0-5460
532e2e3322dc71f281349d18d562a2a00d201b5c 182.254.134.174:7006@17006 slave 232fb95877a5f2b3093b1f7d94b632c10f55c976 0 1660039460000 1 connected
2e939c53fbc695e136bd0e63a07d6f86f9e25cb3 182.254.134.174:7004@17004 master - 0 1660039460525 7 connected 5461-10922

原因:7002已脱离集群;
解决办法:将该从节点剔出集群,重新加入
任意节点上执行 cluster forget命令

127.0.0.1:7001> cluster forget cc079b10ae2ff6e0870250beb91be5f0a8d5fda2 # 踢出集群
OK
127.0.0.1:7001> cluster meet 182.254.134.174 7002 # 握手加入集群
OK
127.0.0.1:7001> cluster nodes
37d2363fbc60a64a3cb5be0cb75c4b418795b02e 182.254.134.174:7002@17002 master - 0 1660040192000 0 connected
78b3bb404c37850c1cb7409b6d1fd1d994ee2582 182.254.134.174:7003@17003 master - 0 1660040195000 3 connected 10923-16383
0238999b8de448562d28eb23f7be491f0603afe5 182.254.134.174:7005@17005 slave 78b3bb404c37850c1cb7409b6d1fd1d994ee2582 0 1660040193966 3 connected
232fb95877a5f2b3093b1f7d94b632c10f55c976 172.17.0.12:7001@17001 myself,master - 0 1660040195000 1 connected 0-5460
532e2e3322dc71f281349d18d562a2a00d201b5c 182.254.134.174:7006@17006 slave 232fb95877a5f2b3093b1f7d94b632c10f55c976 0 1660040196975 1 connected
2e939c53fbc695e136bd0e63a07d6f86f9e25cb3 182.254.134.174:7004@17004 master - 0 1660040195972 7 connected 5461-10922

然再在7002上和7004重新配置主从关系,

127.0.0.1:7002> cluster replicate 2e939c53fbc695e136bd0e63a07d6f86f9e25cb3
127.0.0.1:7002> cluster nodes
232fb95877a5f2b3093b1f7d94b632c10f55c976 182.254.134.174:7001@17001 master - 0 1660040830000 1 connected 0-5460
78b3bb404c37850c1cb7409b6d1fd1d994ee2582 182.254.134.174:7003@17003 master - 0 1660040828781 3 connected 10923-16383
37d2363fbc60a64a3cb5be0cb75c4b418795b02e 172.17.0.12:7002@17002 myself,slave 2e939c53fbc695e136bd0e63a07d6f86f9e25cb3 0 1660040827000 7 connected
0238999b8de448562d28eb23f7be491f0603afe5 182.254.134.174:7005@17005 slave 78b3bb404c37850c1cb7409b6d1fd1d994ee2582 0 1660040829000 3 connected
2e939c53fbc695e136bd0e63a07d6f86f9e25cb3 182.254.134.174:7004@17004 master - 0 1660040829785 7 connected 5461-10922
532e2e3322dc71f281349d18d562a2a00d201b5c 182.254.134.174:7006@17006 slave 232fb95877a5f2b3093b1f7d94b632c10f55c976 0 1660040830789 1 connected

prometheus granafa 监控

下载

https://github.com/oliver006/redis_exporter/releases

配置添加

prometheus.yml

在prometheus.yml添加两个job,redis_exporter和redis_exporter_targets,redis_exporter_targets才是真正监控redis集群的。

  ## config for scraping the exporter itself- job_name: 'redis_exporter'static_configs:- targets:- prod-xxx-xxxx-redis01:9121## config for the multiple Redis targets that the exporter will scrape- job_name: 'redis_exporter_targets'static_configs:- targets:- redis://172.16.0.122:7000- redis://172.16.0.122:7001- redis://172.16.0.120:7002- redis://172.16.0.120:7003- redis://172.16.0.129:7004- redis://172.16.0.129:7005metrics_path: /scraperelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: prod-xxxx-xxxx-redis01:9121

部署redis_exporter

REDIS_ADDR为你redis集群的其中一个节点即可,默认redis_exporter 使用9121端口!!

redis_exporter -redis.addr $ip:6379 -redis.password $password -web.listen-address ":9333"  > /dev/null 2>&1 &

常用选项:

-redis.addr: 连接redis地址:端口

-redis.password: 连接redis的密码

-web.listen-address: 指定redis_exporter的服务端口,格式为-web.listen-address ":9121

然后重启prometheus。

img

grafana模板

id 763

img

文章地址: https://www.cnblogs.com/weifeng1463/p/16617374.html
https://blog.csdn.net/weixin_43844718/article/details/126250467

相关文章:

redis-cluster 创建及监控

集群命令 cluster info&#xff1a;打印集群的信息。 cluster nodes&#xff1a;列出集群当前已知的所有节点&#xff08;node&#xff09;的相关信息。 cluster meet <ip> <port>&#xff1a;将ip和port所指定的节点添加到集群当中。 cluster addslots <slot…...

vue+ivew model框 select校验遇到的问题

iview model 点击关闭&#xff0c;校验没有通过也会关闭 解决办法&#xff1a; 第一步&#xff1a;自定义页脚内容 <div slot"footer"><Button type"primary" click"confirmCarryOver()">确认</Button><Button click&qu…...

mybatis_分页

目的&#xff1a; 减少数据处理量&#xff0c;提高效率 普通sql&#xff1a; 语法&#xff1a;select * from user limit startIndex,pageSize; SELECT * from user limit 3; #[0,n] mybatis_sql: 接口&#xff1a; //分页查询List<User> getUserByLimit(Map<…...

轻量级Firefox Send替代方案Gokapi

想不到一个域名的变动会影响这么大&#xff0c;访问量出现断崖式下跌。由此可见&#xff0c;平时的访问应该只是一些 RSS 的访问而已。 上面是 Pageviews&#xff0c;下面是 Uniques 今天略有回升 难怪那些大公司要花钱买域名了&#xff0c;不过老苏是个佛系的人&#xff0c;一…...

多次发请求优化为发一次请求

优化 getUserInfo 请求 要求 getUserInfo 是个通用接口&#xff0c;在各个模块里面都有可能使用 requestUserInfo 模拟的是请求服务端真正获取用户信息的方法 业务背景 在一个页面有 A, B, C 等多个功能模块&#xff0c;A, B, C 模块渲染执行顺序不可控每个模块都会调用 get…...

彻底搞懂CPU的特权等级

x86 处理器中,提供了4个特权级别:0,1,2,3。数字越小,特权级别越高! 一般来说,操作系统是的重要性、可靠性是最高的,需要运行在 0 特权级; 应用程序工作在最上层,来源广泛、可靠性最低,工作在 3 特权级别。 中间的1 和 2 两个特权级别,一般很少使用。 理论上来讲,…...

JVM对象在堆内存中是否如何分配?

1&#xff1a;指针碰撞&#xff1a;内存规整的情况下 2&#xff1a;空闲列表: 内存不规整的情况下 选择那种分配方式 是有 java堆是否规整而决定的。而java堆是否规整是否对应的垃圾回收器是否带有空间压缩整理的能力决定的。 因此当使用Serial,ParNew等带有压缩整理过程的收…...

【小白慎入】还在手动撸浏览器?教你一招分分钟自动化操作浏览器(Python进阶)

大家好啊&#xff0c;辣条哥又来猛货了&#xff01; 小白慎入&#xff01; 目录 环境安装1 测试样例2 基本配置2.0 基本参数2.1 设置窗口2.2 添加头部2.3 网页截图2.4 伪装浏览器 绕过检测2.5案例演示 触发JS2.6 boss直聘cookie反爬绕过实践2. 7滚动到页面底部 3 进阶使用4 数…...

Unity UGUI的TouchInputModule (触摸输入模块)组件的介绍及使用

Unity UGUI的TouchInputModule (触摸输入模块)组件的介绍及使用 1. 什么是TouchInputModule组件&#xff1f; TouchInputModule是Unity中的一个UGUI组件&#xff0c;用于处理触摸输入事件。它可以让你的游戏在移动设备上实现触摸操作&#xff0c;如点击、滑动、缩放等。 2. …...

SpringMVC启动时非常缓慢,显示一直在部署中,网页也无法访问,,,Artifact is being deployed, please wait...

写了一个基本的SpringMVC程序进行测试&#xff0c;结果启动时一直显示在等待部署完毕&#xff0c;&#xff0c;&#xff0c; but这个地方一直显示转圈圈。。 后来通过url访问时网页一直转圈圈。。也就是等待响应。。 看了一会儿&#xff0c;也不知道哪儿错了&#xff0c;&…...

Docker 镜像操作

Docker镜像操作 我们已经介绍了容器操作,今天来了解下 Docker镜像 以及 镜像操作 。让我们一起开启镜像之旅吧。 Docker镜像 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库…...

linux下有关mysql安装和登录的一些问题记录

1. 输入mysql -u root -p出现报错 ERROR 2002 (HY000): Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2) 前提&#xff1a;MySQL可执行文件位于/usr/local/mysql/bin目录中&#xff0c;如果MySQL安装路径不同&#xff0c;需要相应修改命令…...

DS18B20的原理及实例代码(51单片机、STM32单片机)

一、DS18B20介绍 DS18B20数字温度传感器是DALLAS公司生产的单总线器件&#xff0c;用它来组成一个测温系统具有线路简单&#xff0c;体积小&#xff0c;在一根通信线上可以挂很多这样的数字温度传感器&#xff0c;十分方便。 温度传感器种类众多&#xff0c;应用在高精度、高可…...

两种单例模式

1.单例模式分为两种,饿汉模式和懒汉模式.以下是饿汉模式: public class SingleTonHungry {private static SingleTonHungry singleTonHungry new SingleTonHungry();private SingleTonHungry() {}public static SingleTonHungry getInstance() {return singleTonHungry;} }2.…...

List中交集的使用

前言 新增了一个需求&#xff0c;需要将所有药品和对应数量库存的药房查询出来&#xff0c;要求&#xff1a;‘所有药品该药房都要有&#xff0c;并且库存大于购药数量’&#xff1b; 这就得考虑一个问题&#xff0c;有的药房有该药品&#xff0c;有的药房没有该药品&#xf…...

TypeScript基础篇 - TS的函数

目录 构造函数表达 泛型和函数 泛型函数 Contextual Typing【上下文映射&#xff0c;上下文类型】 泛型约束 手动指定类型 泛型的使用规范 对比 可选参数 思考&#xff1a;onClick中e的设计 函数重载 修改办法 操作符重载 THIS void【空返回值】 思考为什么这样…...

Vue项目如何生成树形目录结构

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一手。 前言 项目的目录结构清晰、可以帮助我们更快理顺项目的整体构成。在写文档之类的时候也比较方便。生成树形目录的方式有多种&#xff0c;我这里简单介绍其中一种较为简单的实现 过…...

postgresql四种逻辑复制的状态

准备 CreateCheckpoint&#xff0c;或者bgwriter启动时&#xff0c;或者创建logicalreplicationslot时都会调用LogStandbySnapshot 记录一个XLOG_RUNNING_XACTS类型的日志。日志中记录了所有提交的事务的xid(HistoricSnapshot) 启动&#xff08;SNAPBUILD_BUILDING_SNAPSHOT&…...

梯度下降法和牛顿法

梯度下降法和牛顿法都是优化方法。 梯度下降法 梯度下降法和相关知识可以参考导数、偏导数、梯度、方向导数、梯度下降、二阶导数、二阶方向导数一文。梯度下降法是一种迭代地每次沿着与梯度相反方向前进的不断降低损失函数的优化方法。梯度下降只用到一阶导数的信息&#xf…...

elment-ui的侧边栏 开关及窗口联动

<template><div class"asders"><el-aside width"200px"><div class"boxbody"><div>源码外卖</div><el-switch v-model"isCollapse" :active-value"true" :inactive-value"fals…...

【从零开始学习JAVA | 第三十二篇】 异常(下)新手必学!

目录 前言&#xff1a; Exceptions&#xff08;异常&#xff09;&#xff1a; 异常的两大作用&#xff1a; 异常的处理方式&#xff1a; 1.JVM默认处理 2.自己捕获异常 3.抛出处理 自定义异常&#xff1a; 异常的优点&#xff1a; 总结&#xff1a; 前言&#xff1a; 前…...

onnxruntime (C++/CUDA) 编译安装

一、克隆及编译 git clone --recursive https://github.com/Microsoft/onnxruntime cd onnxruntime/ git checkout v1.8.0如果克隆的时候报错&#xff1a; 执行以下&#xff1a; apt-get install gnutls-bin git config --global http.sslVerify false git config --global h…...

第三篇-Tesla P40+CentOS-7+CUDA 11.7 部署实践

第一篇-ChatGLM-webui-Windows安装部署-CPU版 第二篇-二手工作站配置 第三篇-Tesla P40CentOS-7CUDA 11.7 部署实践 硬件环境 系统&#xff1a;CentOS-7 CPU: 14C28T 显卡&#xff1a;Tesla P40 24G 准备安装 驱动: 515 CUDA: 11.7 cuDNN: 8.9.2.26 安装依赖 yum clean al…...

Unity游戏源码分享-ARPG游戏Darklight.rar

Unity游戏源码分享-ARPG游戏Darklight.rar 玩法 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88105464...

类型转换运算符

当我们想要将自定义类的对象转换为目标类型时&#xff0c;我们可以通过重载类型转换运算符&#xff08;conversion operator&#xff09;来实现。 以下是一个示例代码&#xff0c;展示了如何在 C 中定义一个自定义类&#xff0c;并重载类型转换运算符将对象转换为目标类型&…...

Kafka 入门到起飞系列 - 消费者组管理、位移管理

消费者组 - Consumer Group 上文我们已经讲过消费者组了&#xff0c;我们知道消费组的存在可以保证一个主题下一个分区的消息只会被组内一个消费者消费&#xff0c;从而避免了消息的重复消费 什么是消费组 - Consumer Group&#xff1f; 消费者组是Kafka 提供的可扩展且具有容…...

SpringBoot——数据层三组件之间的关系

简单介绍 在之前的文章中&#xff0c;我们介绍了一下SpringBoot中内置的几种数据层的解决方案&#xff0c;在数据层由三部分组成&#xff0c;分别是数据库&#xff0c;持久化技术以及数据源&#xff0c;但是我今天写着写着&#xff0c;突然就想不起来这三部分到底是干什么的了…...

LeetCode647.Palindromic-Substrings<回文子串>

题目&#xff1a; 思路&#xff1a; 错误代码&#xff1a;&#xff08;缺少部分判断&#xff09; 使用的是寻找回文子串的方法。以一个点为中心向两边扫描。但是有一点小问题。 因为回文子串是分奇偶的&#xff0c;所以需要两种判断方式。 看了下答案后发现我的代码距离答案一…...

React的hooks---useContext

Context 提供了一个无需为每层组件手动添加 props &#xff0c;就能在组件树间进行数据传递的方法&#xff0c;useContext 用于函数组件中订阅上层 context 的变更&#xff0c;可以获取上层 context 传递的 value prop 值 useContext 接收一个 context 对象&#xff08;React.…...

【Terraform学习】TerraformCloud入门介绍(快速入门)

TerraformCloud入门介绍 什么是 TerraformCloud&#xff1f; Terraform Cloud是Hashicorp Terraform的SaaS版本。 免费版功能 免费版功能包括版本控制集成、远程计划和实施远程计划和实施、通知及webhook、全http API驱动、状态管理、模拟计划、私有化模块注册器以及全HTTP界…...