redis-cluster 创建及监控

news2024/11/15 11:01:09

集群命令

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:7001
   slots:[0-5460] (5461 slots) master
M: 1194702cf2b7ef4f5d5e7854f526aa60d47f2577 182.254.134.174:7002
   slots:[5461-10922] (5462 slots) master
M: b120e1a401f11a06f8d81f19df2607c71c5cf9df 182.254.134.174:7003
   slots:[10923-16383] (5461 slots) master
S: 28362fb68d33eb50322f514daf4e7a447e3eccb3 182.254.134.174:7004
   replicates 1194702cf2b7ef4f5d5e7854f526aa60d47f2577
S: 52b90d0718c06990de002dbe00be512c0f4eccd1 182.254.134.174:7005
   replicates b120e1a401f11a06f8d81f19df2607c71c5cf9df
S: 2aedbda7dadc48e545ec0870b7d3585bb4637c47 182.254.134.174:7006
   replicates 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:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 1194702cf2b7ef4f5d5e7854f526aa60d47f2577 182.254.134.174:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 2aedbda7dadc48e545ec0870b7d3585bb4637c47 182.254.134.174:7006
   slots: (0 slots) slave
   replicates e9750b2aa5a23b0d5e79e98b3a61c6f97a69f01d
M: b120e1a401f11a06f8d81f19df2607c71c5cf9df 182.254.134.174:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 28362fb68d33eb50322f514daf4e7a447e3eccb3 182.254.134.174:7004
   slots: (0 slots) slave
   replicates 1194702cf2b7ef4f5d5e7854f526aa60d47f2577
S: 52b90d0718c06990de002dbe00be512c0f4eccd1 182.254.134.174:7005
   slots: (0 slots) slave
   replicates 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:7005
    metrics_path: /scrape
    relabel_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

libhv之hloop_process_ios源码分析

上一篇文章对hloop源码大概逻辑和思想进行了一个简单的分析&#xff0c;其中主要涉及三类&#xff08;timer>io>idles&#xff09;事件处理。下面将对hloop_process_ios事件做一下简单的分析。 int hloop_process_ios(hloop_t* loop, int timeout) {// That is to call …

vr禁毒毒驾模拟体验从源头拒绝毒品,预防毒品

俗话说&#xff0c;一念天堂&#xff0c;一念地狱。吸毒一口&#xff0c;掉入虎口。吸毒对人体的危害非常大&#xff0c;普通人吸毒会导致家破人亡&#xff0c;明星吸毒会毁掉自己的大好星途。没有感同身受&#xff0c;何来悲喜相通&#xff0c;毒品危害认知VR模拟情景体验是VR…

助力工业物联网,工业大数据之油站事实指标需求分析【十九】

文章目录 01&#xff1a;油站事实指标需求分析02&#xff1a;油站事实指标构建 01&#xff1a;油站事实指标需求分析 目标&#xff1a;掌握DWB层油站事实指标表的需求分析 路径 step1&#xff1a;目标需求step2&#xff1a;数据来源 实施 目标需求&#xff1a;基于油站信息及…

Blend for Visual Sdudio创建C++工程

&#xff08;1&#xff09;打开Blend for Visual Sdudio &#xff08;2&#xff09;点击“创建新项目” &#xff08;3&#xff09;在最右侧下拉到最底部&#xff0c;点击“安装多个工具和功能” &#xff08;4&#xff09;在最底部点击“关闭” &#xff08;5&#xff09;点击…

【电压和电压稳定指数研究】带多台配电发电机 (DG) 的径向配电系统研究【IEEE33节点】(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 电压和电压稳定指数研究是关于电力系统中电压水平和其稳定性的研究。电力系统中的电压是指电网中的电压水平&#xff0c;通常以相电压&#xf…

树莓派本地快速搭建web服务器,并发布公网访问

文章目录 树莓派本地快速搭建web服务器&#xff0c;并发布公网访问 树莓派本地快速搭建web服务器&#xff0c;并发布公网访问 随着科技的发展&#xff0c;电子工业也在不断进步&#xff0c;我们身边的电子设备也在朝着小型化和多功能化演进&#xff0c;以往体积庞大的电脑也在…

vue3 - 报错 Cannot use ‘in‘ operator to search for ‘path‘ in undefined (完美解决)

问题描述 在vue3项目中,浏览器控制台报错 Cannot use ‘in’ operator to search for ‘path’ in undefined 详细解决方案。 解决方案 在创建vue3的路由时,报了这样的错:Cannot use ‘in’ operator to search for ‘path’ in undefined,

flutter开发实战-父子Widget组件调用方法

flutter开发实战-父子Widget组件调用方法 在最近开发中遇到了需要父组件调用子组件方法&#xff0c;子组件调用父组件的方法。这里记录一下方案。 一、使用GlobalKey 父组件使用globalKey.currentState调用子组件具体方法&#xff0c;子组件通过方法回调callback方法调用父组…

U盘里的资料丢失怎么恢复,分享两种有效解决方法

平常我们在用u盘拉文件的时候&#xff0c;有时候会突然发现&#xff0c;本来好好的文件就无缘无故丢失了&#xff0c;这是因为什么情况呢&#xff1f;一般来说&#xff0c;出现这种问题&#xff0c;可能是因为u盘文件被格式化&#xff0c;或者u盘存储损坏了。但是呢&#xff0c…

一键式三分钟轻松打造线上展厅

导语&#xff1a; 在数字时代&#xff0c;线上展厅已成为企业展示品牌和产品的重要方式。随着虚拟现实&#xff08;VR&#xff09;技术的发展&#xff0c;蛙色VR平台成为众多企业选择的首选&#xff0c;因其独特的优势和特点&#xff0c;让线上展厅的打造变得轻松、高效且令人…

使用C#基于ComPDFKit SDK快速构建PDF阅读器

在当今世界&#xff0c;Windows 应用程序对我们的工作至关重要。随着处理 PDF 文档的需求不断增加&#xff0c;将 ComPDFKit PDF 查看和编辑功能集成到您的 Windows 应用程序或系统中&#xff0c;可以极大地为您的用户带来美妙的体验。 在本博客中&#xff0c;我们将首先探索集…

JGIT获取远程仓库、本地仓库提交版本号

https://www.freesion.com/article/50181381474/ JGIT获取远程仓库、本地仓库提交版本号 一、环境搭建二、项目结构二、代码部分 GitUtils.javaGitInfoAtom.java三、运行结果&#xff1a;总结 一、环境搭建 Maven依赖导入 <dependency><groupId>org.eclipse.jg…

进入linux系统中修改网段-ip

第一步 &#xff1a;开启虚拟机 cd 到 /etc/sysconfig/network-scripts 目录下&#xff0c;输入命令给ls,展示这个目录下文件和文件夹 第二步&#xff1a;进入到以ifcfg开头的文件 # ifcfg开头的文件&#xff0c;如果有多个网卡&#xff0c;有多个ifcfg-ensxx文件 命令…

【从零开始学爬虫】采集全国各行业经销商网点数据

l 采集网站 【场景描述】采集全国各行业经销商网点数据&#xff0c;以建材行业为例。 【源网站介绍】买购网MAIGOO.COM建材家居频道&#xff0c;专门提供地面材料、墙顶饰材、洁具五金、门窗楼梯、水电电工、外墙材料、照明灯饰、家纺布艺、家具定制等行业&#xff0c;最新品…

LeetCode.189(轮转数组)

对于轮转数组这个题&#xff0c;文章一共提供三种思路&#xff0c;对于每种思路均提供其对应代码的时间、空间复杂度。 目录 1. 创建变量来保存最后一个数&#xff0c;并将其余数组向前挪动一位 &#xff1a; 1.1 原理解析&#xff1a; 1.2 代码实现&#xff1a; 2.创建一个…

【学习笔记】行为识别SOTA方法比较

这里写目录标题 前言方法1 基于CNN的方法Slow-fast&#xff1a; 2 基于Vision-Transformer的方法Video TimeSformer :Video Swin Transformer : 3、基于自监督的方法VideoMAE&#xff1a; 4、基于多模态的方法Intern video: 前言 常用行为识别数据集包括&#xff1a;HMDB-51、…

TL-ER3220G设置vlan

TL-ER3220G是企业宽带路由器。 自带5个RJ45接口。 其中接口1到接口4都可以接入宽带线路。最多可以并接4路。 本例由接口1接入宽带&#xff0c;默认接口2到接口4组成1个vlan&#xff0c;名称vlan。其中接口5特殊&#xff0c;带宽最大100M。 计划将接口2和接口4组成第一个vlan&…

STM32使用HAL库BH1750光照度传感器

开发环境 单片机&#xff1a;STM32F103C8T6 光照度传感器&#xff1a;BH1750 IDE&#xff1a;KEILSTM32CUBEMX 单片机配置 1、STM32CUBEMX BH1750代码 1、头文件 /* ************************************************* BH1750光照数据计算&#xff08;LUX&#xff09; …

H5和小程序测试点分析

最近接触了较多关于H5页面的测试&#xff0c;H5页面的测试除了业务逻辑功能测试外&#xff0c;其他部分的测试方法基本是可以通用的&#xff0c;在此对H5页面和小程序的一些通用测试方法进行总结分享给大家。 H5优势&#xff1a; 1.H5可以跨平台&#xff0c;开发成本相对较低…