Linux部署Redis Cluster高可用集群(附带集群节点添加删除以及槽位分配操作详解)

news2024/9/30 21:36:58

目录

    • 一、前言
    • 二、下载安装Redis
      • 2.1、选择需要安装的Redis版本
      • 2.2、下载并解压Redis
      • 2.3、编译安装Redis
    • 三、部署Redis Cluster高可用集群
      • 3.1、准备配置文件
      • 3.2、启动Redis服务
      • 3.3、创建Redis集群
      • 3.4、查看集群关系
      • 3.5、连接集群Redis进行数据读写以及重定向测试
      • 3.6、故障转移和恢复测试
      • 3.7、Redis集群中添加节点并分配槽位
        • 3.7.1、先部署两个新的Redis服务使用端口号7007 7008
        • 3.7.2、集群中添加主节点
        • 3.7.3、给新添加的主节点分配槽位
        • 3.7.4、集群中给指定主节点添加从节点
      • 3.8、删除Redis集群中节点
        • 3.8.1、删除从节点
        • 3.8.2、将被删除主节点槽位迁移到别的主节点
        • 3.8.3、删除主节点
    • 四、SpringBoot集成Redis Cluster集群

一、前言

Redis Cluster 集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置比较简单,Redis Cluster 将所有数据划分为 16384个槽位,每个redis 节点负责其中一部分槽位,客户端为了可以直接定位(对 key 通过 crc16 进行 hash 再对16384取余)某个具体的 key 所在节点,需要缓存槽位相关信息,这样才可以准确快速地定位到相应的节点。同时因为可能会存在客户端与服务器存储槽位的信息不一致的情况,还需要纠正机制(通过返回 -MOVED 3999 127.0.0.1:6379,客户端收到后需要立即纠正本地的槽位映射表)来实现槽位信息的校验调整.在这里插入图片描述

这里重点做Redis Cluster集群部署,要想了解原理可以跳转,Redis Cluster高可用集群原理。

二、下载安装Redis

2.1、选择需要安装的Redis版本

在官网发行版中选择一个自己需要的版本,我这里使用Redis6.2.0,小版本区别不大。
Redis发行版本列表:https://download.redis.io/releases
在这里插入图片描述

2.2、下载并解压Redis

  • 下载redis到/usr/local/redis目录中,这里使用wget下载,如果没有wget执行yum -y install wget安装
wget -P /usr/local/redis http://download.redis.io/releases/redis-6.2.0.tar.gz
  • 进入/usr/local/redis目录解压redis
cd /usr/local/redis
tar -xzf redis-6.2.0.tar.gz

在这里插入图片描述

2.3、编译安装Redis

  • 安装gcc
# redis是c语言编写的,编译Redis需要gcc环境
yum -y install gcc
# 安装好后查看gcc信息
gcc -v

在这里插入图片描述

  • 编译
# 进入redis-6.2.0目录
cd redis-6.2.0
# 执行make开始编译 因为我们下载的是源码需要编译成可执行文件
make

在这里插入图片描述

  • 安装
# 编译成功后,执行make PREFIX=/usr/local/redis/redis-6.2.0 install 安装redis
# 这里指定目录之后,方便后续卸载,直接rm -rf /usr/local/redis/redis-6.2.0 即可删除redis
make PREFIX=/usr/local/redis/redis-6.2.0 install
PREFIX 这个关键字的作用是安装的时候用于指定程序存放的路径,假设不添加该关键字Linux会将:
	可执行文件存放在/usr/local/bin目录;
	库文件会存放在/usr/local/lib目录;
	配置文件会存放在/usr/local/etc目录;
	其他的资源文件会存放在usr/local/share目录

在这里插入图片描述

三、部署Redis Cluster高可用集群

  • 这里使用单台主机部署,部署6个redis实例,3个主节点,每个主节点1个从节点,端口号使用7001-7006,Redis服务端口和集群节点gossip通信端口默认是在Redis端口号上加10000,如果不是同一台主机要将防火墙关闭或者开放对应端口。
  • 在Redis Cluster集群部署中不用自己指定master节点,在创建集群时会根据Redis服务数量还有指定每个master节点需要有多少个slave节点自动分配,在下面会进行演示。

3.1、准备配置文件

  • 1、创建每个节点信息的存储目录
# 创建集群总的存储目录
mkdir /usr/local/redis/redis-6.2.0/cluster
# 进入总存储目录
cd /usr/local/redis/redis-6.2.0/cluster
# 创建每个节点存储目录
mkdir 7001 7002 7003 7004 7005 7006
  • 2、先准备7001节点的配置文件,后面只要替换配置文件中的7001然后分发到不同节点存储目录即可
# 进入 usr/local/redis/redis-6.2.0 目录操作
cd /usr/local/redis/redis-6.2.0
# 备份一份当前目录redis.conf文件做留存
cp redis.conf redis.conf.back
# 修改redis.conf文件 先给7001节点做配置,后面只要替换配置文件中的7001即可
vi redis.conf

修改下面配置

# 绑定的主机地址,建议填redis安装服务器的业务私网地址
# 这里为了方便直接找到这个配置注释了
#bind 127.0.0.1 -::1

# redis进程的端口号 默认是6379
port 7001

# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问,这里关闭保护模式设置为no。
protected-mode no

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端,终端关闭redis服务也会关闭)。
daemonize yes

# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_7001.pid

# log文件输出位置
logfile /usr/local/redis/redis-6.2.0/cluster/7001/redis.log

# 指定数据文件存放目录(默认当前启动时所在目录),因为我这里是一台机器部署的要区分开每个节点持久化文件存放的目录
dir /usr/local/redis/redis-6.2.0/cluster/7001

# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 123456

# 设置集群节点间访问密码,跟上面一致
masterauth 123456

# 启动集群模式
cluster-enabled yes

# 集群节点信息文件,这里700x最好和port对应上
cluster-config-file nodes‐7001.conf

# 集群节点的超时时限,节点发送对其它节点的PING命令的时候如果超过这个时间还没有响应则标记另外一个为故障状态 默认:15000毫秒
cluster‐node‐timeout 15000
  • 3、分发各节点配置文件并替换对应端口
# 复制7001的redis.conf到每个节点数据存储目录
cp redis.conf ./cluster/7001/redis.conf
cp redis.conf ./cluster/7002/redis.conf
cp redis.conf ./cluster/7003/redis.conf
cp redis.conf ./cluster/7004/redis.conf
cp redis.conf ./cluster/7005/redis.conf
cp redis.conf ./cluster/7006/redis.conf

# 替换每个节点配置文件中的7001字符串为自己节点端口
sed -i  "s/7001/7002/g" ./cluster/7002/redis.conf
sed -i  "s/7001/7003/g" ./cluster/7003/redis.conf
sed -i  "s/7001/7004/g" ./cluster/7004/redis.conf
sed -i  "s/7001/7005/g" ./cluster/7005/redis.conf
sed -i  "s/7001/7006/g" ./cluster/7006/redis.conf

3.2、启动Redis服务

./bin/redis-server ./cluster/7001/redis.conf
./bin/redis-server ./cluster/7002/redis.conf
./bin/redis-server ./cluster/7003/redis.conf
./bin/redis-server ./cluster/7004/redis.conf
./bin/redis-server ./cluster/7005/redis.conf
./bin/redis-server ./cluster/7006/redis.conf

查看进程启动状态

ps -aux | grep redis

在这里插入图片描述

3.3、创建Redis集群

Redis5以前的版本集群是依靠ruby脚本redis‐trib.rb实现,之后是使用redis‐cli创建整个Redis集群,我这里使用的是Redis6.2.0.

# 创建集群
## -a 密码
## --cluster create 创建集群后面带每个节点的IP:端口
## --cluster-replicas 1 表示为每个master创建一个slave节点
./bin/redis-cli -a 123456 --cluster create 172.16.8.186:7001 172.16.8.186:7002 172.16.8.186:7003 172.16.8.186:7004 172.16.8.186:7005 172.16.8.186:7006 --cluster-replicas 1

在创建时会询问是否设置成列出来的配置,输入yes回车即可,槽位分配和主从关系都是由Cluster计算出来的,后续可以通过命令调整

[root@parent-docker redis-6.2.0]# ./bin/redis-cli -a 123456 --cluster create 172.16.8.186:7001 172.16.8.186:7002 172.16.8.186:7003 172.16.8.186:7004 172.16.8.186:7005 172.16.8.186:7006 --cluster-replicas 1
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 172.16.8.186:7005 to 172.16.8.186:7001
Adding replica 172.16.8.186:7006 to 172.16.8.186:7002
Adding replica 172.16.8.186:7004 to 172.16.8.186:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: e4528f6cbf114daaa6d18c8a4111a98329b7c319 172.16.8.186:7001
   slots:[0-5460] (5461 slots) master
M: d52909707e7a7946955759e9b943e81fe85b3d67 172.16.8.186:7002
   slots:[5461-10922] (5462 slots) master
M: aa60b733ba646f9bc541f0a29f9ccaffe9e65f09 172.16.8.186:7003
   slots:[10923-16383] (5461 slots) master
S: d524a41b8a358b7ad678ff913da62899668d2e69 172.16.8.186:7004
   replicates e4528f6cbf114daaa6d18c8a4111a98329b7c319
S: 5fb34e0d2187e49cfbba3b4fb89bf40d591089a0 172.16.8.186:7005
   replicates d52909707e7a7946955759e9b943e81fe85b3d67
S: d1eea9da1d8f471aa90e12f5957f538bce72312c 172.16.8.186:7006
   replicates aa60b733ba646f9bc541f0a29f9ccaffe9e65f09
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 172.16.8.186:7001)
M: e4528f6cbf114daaa6d18c8a4111a98329b7c319 172.16.8.186:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: d52909707e7a7946955759e9b943e81fe85b3d67 172.16.8.186:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: d524a41b8a358b7ad678ff913da62899668d2e69 172.16.8.186:7004
   slots: (0 slots) slave
   replicates e4528f6cbf114daaa6d18c8a4111a98329b7c319
S: 5fb34e0d2187e49cfbba3b4fb89bf40d591089a0 172.16.8.186:7005
   slots: (0 slots) slave
   replicates d52909707e7a7946955759e9b943e81fe85b3d67
M: aa60b733ba646f9bc541f0a29f9ccaffe9e65f09 172.16.8.186:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: d1eea9da1d8f471aa90e12f5957f538bce72312c 172.16.8.186:7006
   slots: (0 slots) slave
   replicates aa60b733ba646f9bc541f0a29f9ccaffe9e65f09
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

3.4、查看集群关系

在任意一台节点都能查看

./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7001

可以在这个信息中看到主从关系和槽位以及每个主节点中key的数量信息。
在这里插入图片描述

还可以连接上任意一台Redis服务使用命令查看

# 查看集群信息
172.16.8.186:7001> cluster info
# 查看节点列表
172.16.8.186:7001> cluster nodes

3.5、连接集群Redis进行数据读写以及重定向测试

  • 1、连接集群Redis(连接任意节点都可以,操作key时如果槽位不在当前节点或者不是主节点,会自动重定向到对应的主节点)
## -c 集群节点跳转重定向,如果不加-c,节点之间是无法自动跳转的
./bin/redis-cli -c -h 172.16.8.186 -p 7001 -a 123456
  • 2、插入数据
172.16.8.186:7001> set names kerwin

在7001节点执行插入操作,计算出names这个key的槽位为6659,是在主节点7002中,这里可以看到直接重定向到了7002节点,就相当于在7002节点执行的插入,而且客户端这里连接的节点也变为了7002,如果计算出的槽位在7001中则可以直接插入。
在这里插入图片描述

  • 3、读取数据
    先关闭连接,然后重新连接。

    172.16.8.186:7001> get names
    

    读数据这里和写数据是一样的逻辑,计算出key的槽位不在当前主节点,则会自动重定向到对应的主节点中读取。
    在这里插入图片描述

  • 4、从节点读数据
    根据上面的测试我们看到names这个key会落在7002节点中,7002的从节点是7005,那么我们在7005上执行读操作会进行重定向吗,这里测试一下。

    ## -c 集群节点跳转重定向,如果不加-c,节点之间是无法自动跳转的
    ./bin/redis-cli -c -h 172.16.8.186 -p 7005 -a 123456
    

    这里可以看到就算在从节点也无法获取数据,还是会重定向到主节点获取数据,官方默认设置的是不分担读请求的、只作备份和故障转移用,当有请求读向从节点时,会被重定向对应的主节点来处理。
    在这里插入图片描述

    要想在从节点读取数据也可以使用readonly命令,这个readonly告诉 Redis Cluster 从节点客户端愿意读取可能过时的数据并且对写请求不感兴趣,只在当前会话有效,断开连接后readonly就失效了,再次连接需要重新使用该命令。
    在这里插入图片描述

3.6、故障转移和恢复测试

  • 1、这里我们手动停止主节点7001
./bin/redis-cli -c -h 172.16.8.186 -p 7001 -a 123456 shutdown
  • 2、查看集群信息
./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7002

这里可以看到7001已经没了,7004变成了新的主节点
在这里插入图片描述

  • 3、重新启动7001
./bin/redis-server ./cluster/7001/redis.conf
  • 4、查看集群信息
./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7002

可以看到7001又加入了集群,不过这个时候是7004的从节点
在这里插入图片描述

3.7、Redis集群中添加节点并分配槽位

进入/usr/local/redis/redis-6.2.0目录操作cd /usr/local/redis/redis-6.2.0

3.7.1、先部署两个新的Redis服务使用端口号7007 7008
# 1、创建7007 7008节点存储目录
mkdir /usr/local/redis/redis-6.2.0/cluster/7007
mkdir /usr/local/redis/redis-6.2.0/cluster/7008

# 2、复制7001的redis.conf到7007 7008节点存储目录
cp redis.conf ./cluster/7007/redis.conf
cp redis.conf ./cluster/7008/redis.conf

# 3、替换每个节点配置文件中的7001字符串为自己节点端口
sed -i  "s/7001/7007/g" ./cluster/7007/redis.conf
sed -i  "s/7001/7008/g" ./cluster/7008/redis.conf

# 4、启动7007 7008节点Redis服务
./bin/redis-server ./cluster/7007/redis.conf
./bin/redis-server ./cluster/7008/redis.conf

# 5、查看7007 7008节点启动状态
ps -aux | grep redis

在这里插入图片描述

3.7.2、集群中添加主节点
# --cluster add-node  添加节点,如果命令中没有--cluster-slave --cluster-master-id则是添加主节点
# 172.16.8.186:7007  需要添加的Redis服务
# 172.16.8.186:7001  集群中任意一个节点都可以,我这里使用7001节点
# -a 123456  Redis服务密码
./bin/redis-cli -a 123456 --cluster add-node 172.16.8.186:7007 172.16.8.186:7001

在这里插入图片描述

添加好后可以查看集群信息

./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7001

可以看到7007已经成功加入集群,并且为主节点,但是没有槽位,无法进行读写,需要先分配槽位
在这里插入图片描述

3.7.3、给新添加的主节点分配槽位
# --cluster reshard  重新分配槽位
# 172.16.8.186:7001  集群中任意节点都行,这里选择7001
./bin/redis-cli -a 123456 --cluster reshard 172.16.8.186:7001

在这里插入图片描述

回车执行后还会询问一下是否执行分配,输入yes回车即可,后面会开始执行槽位迁移,执行完后查看集群信息,可以看到7007节点被分配了三个区间的槽位,总合4096,正好是从其它3个节点迁移过来的。
在这里插入图片描述

3.7.4、集群中给指定主节点添加从节点
# --cluster add-node  添加节点,如果命令中加了--cluster-slave --cluster-master-id 则是添加从节点
# --cluster-slave 添加从节点
# --cluster-master-id 主节点ID
# 172.16.8.186:7008  需要添加的Redis服务
# 172.16.8.186:7001  集群中任意一个节点都可以,我这里使用7001节点
# -a 123456  Redis服务密码
./bin/redis-cli -a 123456 --cluster add-node 172.16.8.186:7008 172.16.8.186:7001 --cluster-slave --cluster-master-id 5292ce107ed07159d3e9b413aad3210277494c9c

在这里插入图片描述

添加好查看一下集群节点信息

./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7001

从节点也添加成功
在这里插入图片描述

3.8、删除Redis集群中节点

  • 注意事项
    • 要删除节点首先要先删除从节点,确保主节点下没有从节点,避免从节点自动切换成其它主节点的从节点。

    • 删除主节点前要先将被删除节点的槽位分配出去,不然无法删除会出现[ERR] Node 172.16.8.186:7007 is not empty! Reshard data away and try again.

    • 在移除某个Redis节点之前,不能登入该节点操作,要使用其它节点会话操作,否则不能正常移除该节点。

3.8.1、删除从节点
# --cluster del-node 删除节点
# 172.16.8.186:7001 集群中任意节点,不能是被删除的节点
# 7d1437adb68606d46160220cdba2f2728b88ec4d 在最后面带上要删除的节点ID
./bin/redis-cli -a 123456 --cluster del-node 172.16.8.186:7001 7d1437adb68606d46160220cdba2f2728b88ec4d
3.8.2、将被删除主节点槽位迁移到别的主节点
# --cluster reshard  重新分配槽位
# 172.16.8.186:7001  集群中任意节点都行,这里选择7001
./bin/redis-cli -a 123456 --cluster reshard 172.16.8.186:7001

在这里插入图片描述

查看一下集群节点信息

./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7001

在这里插入图片描述

3.8.3、删除主节点
# --cluster del-node 删除节点
# 172.16.8.186:7001 集群中任意节点,不能是被删除的节点
# 5292ce107ed07159d3e9b413aad3210277494c9c 在最后面带上要删除的节点ID
./bin/redis-cli -a 123456 --cluster del-node 172.16.8.186:7001 5292ce107ed07159d3e9b413aad3210277494c9c

在这里插入图片描述

查看一下集群节点信息

./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7001

7007和7008节点都被移除
在这里插入图片描述

四、SpringBoot集成Redis Cluster集群

https://blog.csdn.net/weixin_44606481/article/details/134073096

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

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

相关文章

数据库设计原则

一、前言 在平时的web系统开发中&#xff0c;数据库是必不可少的一部分&#xff0c;没有了数据库&#xff0c;程序处理的数据就不知如何更好安放。然而数据库没有很好的设计&#xff0c;使用起来也是很不好用的。本节就介绍一下数据库得到基础知识和设计原则。 二、为什么需要…

NEFU离散数学实验3-递推方程

相关概念 递推方程是指一种递归定义&#xff0c;它将问题拆分成更小的子问题&#xff0c;并使用这些子问题的解来计算原问题的解。离散数学中&#xff0c;递推方程通常用于描述数列、组合问题等。 以下是一些递推方程相关的概念和公式&#xff1a; 1. 递推公式&#xff1a;递推…

【嵌入式开发 Linux 常用命令系列 9 -- linux系统终端命令提示符设置(PS1)】

文章目录 Linux PS1 介绍PS1 纯文本和特殊的转义序列PS1 颜色设置 Linux PS1 介绍 在Linux中&#xff0c;PS1&#xff08;Prompt String 1&#xff09;是一个环境变量&#xff0c;用来定义shell命令提示符的显示内容和格式。当你在终端中输入命令时&#xff0c;PS1定义的就是那…

共享WiFi贴推广项目怎么操作?

共享WiFi贴推广项目是一种热门的商业共享服务项目&#xff0c;旨在为用户提供便捷的网络连接&#xff0c;并为代理商带来可观的收益。在本文中&#xff0c;我们将探讨该项目的操作方法&#xff0c;帮助你在推广共享WiFi贴时取得成功。 首先&#xff0c;你需要选择适宜的商户或商…

Ansys Zemax | 解像力仿真设计

附件下载 联系工作人员获取附件 实现 本节介绍了一个模拟解像力图表的例子。 作为一个例子&#xff0c;我们将使用一个等倍率的光学系统&#xff0c;如下图所示&#xff1a; 首先&#xff0c;检查该光学系统的MTF。 分辨率图是用黑白的二进制图像创建的。 MTF设置如下图所…

【JAVA学习笔记】46 - (43)第十一章作业

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter11/src/com/yinhai/homework11 1.枚举类 1.创建一个Color枚举类 2.有RED,BLUE,BL ACK,YELLOW,GREEN这个五个枚举值/对象: 3. Color有三 个属性redValue, greenValue, blueValue, 4.创建构…

uniapp 运行项目在 Android 模拟器中

在开发App时&#xff0c;无论是使用 Flutter 还是 React native&#xff0c;还是使用uni-app 开发跨端App时&#xff0c;总是需要运行调试。一般调试分为两种。 第一&#xff1a;真机调试 第二&#xff1a;模拟器调试 真机调试的好处是可以看到更好的效果&#xff0c;缺点就是…

LibreOffice编辑excel文档如何在单元格中输入手动换行符

用WPS编辑excel文档的时候&#xff0c;要在单元格中输入手动换行符&#xff0c;可以先按住Alt键&#xff0c;然后回车。 而用LibreOffice编辑excel文档&#xff0c;要在单元格中输入手动换行符&#xff0c;可以先按住Ctrl键&#xff0c;然后回车。例如&#xff1a;

业务设计——分库分表下多种登录方式实现【用户名、邮箱、手机号】

业务需求&#xff1a; 实现多种方式的登录流程&#xff0c;要求对用户数据采用分库分表来实现水平扩展 难点分析 难点一 用户登录方式需智能匹配&#xff0c;确保根据其输入的数据类型来确定登录方式&#xff0c;查询数据库指定字段&#xff0c;避免无用查询导致资源浪费 难…

CVPR2023 即插即用 SCConv (附代码)

论文地址&#xff1a;SSCONV 代码地址&#xff1a;https://github.com/cheng-haha/ScConv 1.是什么&#xff1f; SCConv是一种高效的卷积模块&#xff0c;用于压缩卷积神经网络中的冗余特征&#xff0c;以减少计算负荷并提高模型性能。它由空间重构单元(SRU)和信道重构单元(…

如何保障单病种上报的填报效率、质量监控及数据安全

在国家平台对单病种病例进行手工直报&#xff0c;是大多数医院最初获知《关于进一步加强单病种质量管理与控制工作的通知》后的首选方式。随着医院对上报流程与内容的逐步熟练&#xff0c;质控管理的需求开始凸显并占据主要地位&#xff0c;同时为了能更好地适应国家平台的频繁…

基于STM32设计的万能红外遥控器(学习型)

一、项目设计 基于STM32设计的万能红外遥控器(学习型) 随着智能家居和物联网技术的发展,红外遥控器作为传统的智能设备控制方式逐渐被淘汰,但在某些场景下,红外遥控器仍然是一种快速、简单的操作方式,当前介绍了一种基于STM32微控制器设计的红外遥控器,支持接收解码功能和…

谁在成为产业供应链的“新发动机”?

京东供应链金融路径不仅是金融的助力和加持&#xff0c;也更是京东供应链金融科技在产业侧的更有价值表达&#xff0c;推动当下产业数字互联从点到线&#xff0c;再到网的更大程度协同。 作者|皮爷 出品|产业家 2022年&#xff0c;一款名为“海油e融”的融资产品出现在市面…

CSS色域、色彩空间、CSS Color 4新标准 | 京东云技术团队

引言 近期&#xff0c;三大主流浏览器引擎均发布最新版本&#xff0c;支持W3C的CSS Color 4标准&#xff0c;包含新的取色方法color()和相应语法&#xff0c;可展示更多的色域及色彩空间&#xff0c;这意味着web端能展示更丰富更高清的色彩。虽然目前只有最新版本的现代浏览器…

非对称加密算法RSA的深度解析,在CTF中RSA题目

一、背景 现代密码体系中&#xff0c;主要分为两类&#xff0c;对称加密和非对称加密两大类。在安全性方面上&#xff0c;非对称加密以安全可靠&#xff0c;在互联网中特别广泛的使用&#xff0c;就如我们平时接触到的https的TLS等一些证书的实现&#xff0c;也深得非对称加密…

showdoc 文件上传 (cnvd-2020-26585)

showdoc 文件上传 &#xff08;cnvd-2020-26585&#xff09; 描述 ShowDoc是一个非常适合IT团队的在线API文档、技术文档工具。通过showdoc&#xff0c;你可以方便地使用markdown语法来书写出美观的API文档、数据字典文档、技术文档、在线excel文档等等。 api_page存在任意文…

漏洞复现-showdoc文件上传_v2.8.3_(CNVD-2020-26585)

showdoc文件上传_v2.8.3_CNVD-2020-26585 漏洞信息 showdoc 2.8.3 以下版本中存在安全漏洞CNVD-2020-26585文件上传漏洞 描述 ShowDoc是一个非常适合IT团队的在线API文档、技术文档工具。通过showdoc&#xff0c;你可以方便地使用markdown语法来书写出美观的API文档、数据字…

做国外问卷调查的工作靠谱吗?

哈喽大家好&#xff0c;我是橙河网络&#xff0c;最近网上都在传做问卷能赚美金的项目&#xff0c;也就是“海外问卷调查”&#xff0c;我在这跟大家简单唠唠它是个啥&#xff0c;做国外问卷调查的工作靠谱吗&#xff1f; 海外问卷调查&#xff0c;顾名思义&#xff0c;就是我…

开始学习Go编程

探索Go编程中的语法、数据类型和控制流 Go&#xff0c;又称为Golang&#xff0c;因其简单性、性能和效率而广受欢迎。在本文中&#xff0c;我们将深入研究构成Go编程语言基础的基本概念。从理解其语法和数据类型到掌握控制流和函数&#xff0c;我们将为您提供启动Go编程之旅所…

芋道前后端分离项目跳过登录

后端接口 1. nacos配置 根据以上两图可以发现芋道的跳过登录配置在nacos或者yml可以配置成如下样式 将所有需要跳过登录的方法写在permit-all_urls下级即可 2. PermitAll注解&#xff1a;不管登入,不登入 都能访问 注&#xff1a;如果一个页面有多个接口那么所有接口均需要写…