Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

一、准备工作

本次Redis 集群搭建使用官方提供的Redis Cluster的管理工具:redis-trib.rb;

一共需要4个部件:

  • Redis
  • Ruby语言运行环境
  • Redis的Ruby驱动redis-xxxx.gem
  • 创建Redis集群的工具redis-trib.rb,使用redis-trib.rb工具来创建Redis集群,由于该文件是用ruby语言写的,所以需要安装Ruby开发环境,以及驱动redis-xxxx.gem。

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

下载

  1. 下载Redis安装文件:https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100 Redis提供msi和zip格式的下载文件,这里下载zip格式Redis-x64-3.2.100版本。
  2. 下载Ruby安装文件:http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.2.4-x64.exe 无法下载的话这理由阿里云盘地址:「rubyinstaller-2.7.5-1-x64.exe」
  3. 下载Ruby环境下Redis的驱动:https://rubygems.org/gems/redis/versions/3.2.2 考虑到兼容性,这里下载的是3.2.2版本(点击页面右下角”相关链接”里的”下载”)Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)
  4. 下载Redis官方提供的创建Redis集群的ruby脚本文件redis-trib.rb https://raw.githubusercontent.com/MSOpenTech/redis/3.0/src/redis-trib.rb 如法下载的话这理有阿里云盘下载地址:https://www.aliyundrive.com/s/bGgYqmZ3hYn

二、安装Redis

将下载的 Redis-x64-3.2.100.zip 解压到 D盘下的 Redis-Cluster 文件夹里:D:\Redis-Cluster\Redis-x64-3.2.100

配置 Redis 实例

需要运行3个实例,Redis集群需要至少3个以上节点,低于3个无法创建;

通过配置文件来启动6个不同的Redis实例,将创建一个三主三从的集群;

由于Redis默认端口为6379,所以这里使用了6380、6381、6382、6383、6384、6385来运行6个Redis实例;

注意

  1. 为了避免不必要的错误,配置文件尽量保存为utf8格式,并且不要包含注释;
  2. 配置文件中以下两种保存日志的方式(保存在文件中、保存到System Log中)请根据需求选择其中一种即可:
loglevel notice                                                     #日志的记录级别,notice是适合生产环境的
logfile "D:/Redis-Cluster/Redis-x64-3.2.100/Logs/redis6380_log.txt" #指定log的保持路径,默认是创建在Redis安装目录下,如果有子目录需要手动创建,如此处的Logs目录
syslog-enabled yes                                                  #是否使用系统日志   
syslog-ident redis6380                                              #在系统日志的标识名

这里使用了保存在文件中的方式,所以先在Redis目录 D:\Redis-Cluster\Redis-x64-3.2.100下新建Logs文件夹。

在Redis安装根目录下,创建编码格式为utf-8的配置文件:redis.6380.conf、redis.6381.conf、redis.6382.conf、redis.6383.conf、redis.6384.conf、redis.6385.conf。

redis.6380.conf

port 6380
loglevel notice
logfile "D:/Redis-Cluster/Redis-x64-3.2.100/Logs/redis6380_log.txt"
appendonly yes
appendfilename "appendonly.6380.aof"
cluster-enabled yes
cluster-config-file nodes.6380.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

redis.6381.conf

port 6381
loglevel notice
logfile "D:/Redis-Cluster/Redis-x64-3.2.100/Logs/redis6381_log.txt"
appendonly yes
appendfilename "appendonly.6381.aof"
cluster-enabled yes
cluster-config-file nodes.6381.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

redis.6382.conf

port 6382
loglevel notice
logfile "D:/Redis-Cluster/Redis-x64-3.2.100/Logs/redis6382_log.txt"
appendonly yes
appendfilename "appendonly.6382.aof"
cluster-enabled yes
cluster-config-file nodes.6382.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

redis.6383.conf

port 6383
loglevel notice
logfile "D:/Redis-Cluster/Redis-x64-3.2.100/Logs/redis6383_log.txt"
appendonly yes
appendfilename "appendonly.6383.aof"
cluster-enabled yes
cluster-config-file nodes.6383.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

redis.6384.conf

port 6384
loglevel notice
logfile "D:/Redis-Cluster/Redis-x64-3.2.100/Logs/redis6384_log.txt"
appendonly yes
appendfilename "appendonly.6384.aof"
cluster-enabled yes
cluster-config-file nodes.6384.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

redis.6385.conf

port 6385
loglevel notice
logfile "D:/Redis-Cluster/Redis-x64-3.2.100/Logs/redis6385_log.txt"
appendonly yes
appendfilename "appendonly.6385.aof"
cluster-enabled yes
cluster-config-file nodes.6385.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

配置相关解释

port 6380                                 #端口号
loglevel notice                           #日志的记录级别,notice是适合生产环境的
logfile "Logs/redis6380_log.txt"          #指定log的保持路径,默认是创建在Redis安装目录下,如果有子目录需要手动创建,如此处的Logs目录
syslog-enabled yes                        #是否使用系统日志
syslog-ident redis6380                    #在系统日志的标识名
appendonly yes                            #数据的保存为aof格式
appendfilename "appendonly.6380.aof"      #数据保存文件
cluster-enabled yes                       #是否开启集群
cluster-config-file nodes.6380.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

安装Redis服务

将上述配置文件保存到Redis目录下,并使用这些配置文件安装6个redis服务,命令如下

D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-install D:/Redis-Cluster/Redis-x64-3.2.100/redis.6380.conf --service-name redis6380
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-install D:/Redis-Cluster/Redis-x64-3.2.100/redis.6381.conf --service-name redis6381
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-install D:/Redis-Cluster/Redis-x64-3.2.100/redis.6382.conf --service-name redis6382
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-install D:/Redis-Cluster/Redis-x64-3.2.100/redis.6383.conf --service-name redis6383
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-install D:/Redis-Cluster/Redis-x64-3.2.100/redis.6384.conf --service-name redis6384
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-install D:/Redis-Cluster/Redis-x64-3.2.100/redis.6385.conf --service-name redis6385

redis.6380.conf等配置文件最好使用完整路径,避免重启Redis集群出现问题

服务卸载命令

D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-uninstall D:/Redis-Cluster/Redis-x64-3.2.100/redis.6380.conf --service-name redis6380
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-uninstall D:/Redis-Cluster/Redis-x64-3.2.100/redis.6381.conf --service-name redis6381
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-uninstall D:/Redis-Cluster/Redis-x64-3.2.100/redis.6382.conf --service-name redis6382
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-uninstall D:/Redis-Cluster/Redis-x64-3.2.100/redis.6383.conf --service-name redis6383
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-uninstall D:/Redis-Cluster/Redis-x64-3.2.100/redis.6384.conf --service-name redis6384
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-uninstall D:/Redis-Cluster/Redis-x64-3.2.100/redis.6385.conf --service-name redis6385

启动Redis服务

D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-start --service-name redis6380
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-start --service-name redis6381
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-start --service-name redis6382
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-start --service-name redis6383
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-start --service-name redis6384
D:/Redis-Cluster/Redis-x64-3.2.100/redis-server.exe --service-start --service-name redis6385

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

三、安装Ruby

Ruby环境安装

双击下载的 “rubyinstaller-2.2.4-x64.exe” 安装即可,同样,为了操作方便,也是建议安装在盘符根目录下 D:\Ruby27-x64

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

意思是将ruby添加到系统的环境变量中,在cmd命令中能直接使用ruby的命令

安装Ruby环境下Redis的驱动

将下载的”Ruby环境下Redis的驱动文件(redis-3.2.2.gem)”拷贝到Ruby安装根目录(D:\Ruby27-x64)下。

然后执行安装命令如下:

gem install --local D:\Ruby27-x64\redis-3.2.2.gem

四、创建Redis集群

将下载的”创建Redis集群的ruby脚本文件 “redis-trib.rb” 文件拷贝到Redis安装根目录(D:\Redis-Cluster\Redis-x64-3.2.100)下。

使用redis-trib.rb来创建Redis集群

CMD 下切换到Redis目录(D:\Redis-Cluster\Redis-x64-3.2.100)

中间有一行是问我们是否接收此分配:输入yes。

D:/Redis-Cluster/Redis-x64-3.2.100/redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
D:\Redis-Cluster\Redis-x64-3.2.100>redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
>>> Creating cluster
Connecting to node 127.0.0.1:6380: OK
Connecting to node 127.0.0.1:6381: OK
Connecting to node 127.0.0.1:6382: OK
Connecting to node 127.0.0.1:6383: OK
Connecting to node 127.0.0.1:6384: OK
Connecting to node 127.0.0.1:6385: OK
>>> Performing hash slots allocation on 6 nodes...

Using 3 masters:
127.0.0.1:6380
127.0.0.1:6381
127.0.0.1:6382
Adding replica 127.0.0.1:6383 to 127.0.0.1:6380
Adding replica 127.0.0.1:6384 to 127.0.0.1:6381
Adding replica 127.0.0.1:6385 to 127.0.0.1:6382
M: bb6ef615bb0ae13275943caec0db9d30b9f35c5e 127.0.0.1:6380   slots:0-5460      (5461 slots) master
M: b4d120f2983ad683f7b68992e1ba414722238db7 127.0.0.1:6381   slots:5461-10922  (5462 slots) master
M: 837779b3965e2c9d4dd4385750aaaaf9a9039fb0 127.0.0.1:6382   slots:10923-16383 (5461 slots) master
S: 5d154137180284d926ef51a91fc75f9438249ef8 127.0.0.1:6383   replicates bb6ef615bb0ae13275943caec0db9d30b9f35c5e
S: ad151680a3e36cf2083ef822be0bdb075a7d36de 127.0.0.1:6384   replicates b4d120f2983ad683f7b68992e1ba414722238db7
S: 9a2260a5a6a2add84b622a453a6a7b86a29d180d 127.0.0.1:6385   replicates 837779b3965e2c9d4dd4385750aaaaf9a9039fb0
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 127.0.0.1:6380)M: bb6ef615bb0ae13275943caec0db9d30b9f35c5e 127.0.0.1:6380   slots:0-5460      (5461 slots) master
M: b4d120f2983ad683f7b68992e1ba414722238db7 127.0.0.1:6381   slots:5461-10922  (5462 slots) master
M: 837779b3965e2c9d4dd4385750aaaaf9a9039fb0 127.0.0.1:6382   slots:10923-16383 (5461 slots) master
M: 5d154137180284d926ef51a91fc75f9438249ef8 127.0.0.1:6383   slots:            (0 slots)    master   replicates bb6ef615bb0ae13275943caec0db9d30b9f35c5e
M: ad151680a3e36cf2083ef822be0bdb075a7d36de 127.0.0.1:6384   slots:            (0 slots)    master   replicates b4d120f2983ad683f7b68992e1ba414722238db7
M: 9a2260a5a6a2add84b622a453a6a7b86a29d180d 127.0.0.1:6385   slots:            (0 slots)    master   replicates 837779b3965e2c9d4dd4385750aaaaf9a9039fb0
[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

可以看到这次分配 6380,6381,6382是 master,其他三台是 slave。

备注

  1. –replicas #指定集群中每个主节点配备几个从节点,这里设置为1。
  2. 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-trib.rb check 127.0.0.1:6380

如果现实信息如下,则说明创建的Redis集群是没问题。

D:\Redis-Cluster\Redis-x64-3.2.100>redis-trib.rb check 127.0.0.1:6380
Connecting to node 127.0.0.1:6380: OK
Connecting to node 127.0.0.1:6383: OK
Connecting to node 127.0.0.1:6382: OK
Connecting to node 127.0.0.1:6384: OK
Connecting to node 127.0.0.1:6385: OK
Connecting to node 127.0.0.1:6381: OK
>>> Performing Cluster Check (using node 127.0.0.1:6380)
M: bb6ef615bb0ae13275943caec0db9d30b9f35c5e 127.0.0.1:6380   slots:0-5460      (5461 slots) master   1 additional replica(s)
S: 5d154137180284d926ef51a91fc75f9438249ef8 127.0.0.1:6383   slots:            (0 slots)    slave    replicates bb6ef615bb0ae13275943caec0db9d30b9f35c5e
M: 837779b3965e2c9d4dd4385750aaaaf9a9039fb0 127.0.0.1:6382   slots:10923-16383 (5461 slots) master   1 additional replica(s)
S: ad151680a3e36cf2083ef822be0bdb075a7d36de 127.0.0.1:6384   slots:            (0 slots)    slave    replicates b4d120f2983ad683f7b68992e1ba414722238db7
S: 9a2260a5a6a2add84b622a453a6a7b86a29d180d 127.0.0.1:6385   slots:            (0 slots)    slave    replicates 837779b3965e2c9d4dd4385750aaaaf9a9039fb0
M: b4d120f2983ad683f7b68992e1ba414722238db7 127.0.0.1:6381   slots:5461-10922  (5462 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.

D:\Redis-Cluster\Redis-x64-3.2.100>

信息查询

使用Redis客户端Redis-cli.exe来查看数据记录数,以及集群相关信息(-c 启动集群模式)

D:\Redis-Cluster\Redis-x64-3.2.100>redis-cli.exe -h 127.0.0.1 -c -p 6380127.0.0.1:6380> cluster nodes5d154137180284d926ef51a91fc75f9438249ef8 127.0.0.1:6383 slave          bb6ef615bb0ae13275943caec0db9d30b9f35c5e 0 1560690706115 4 connectedbb6ef615bb0ae13275943caec0db9d30b9f35c5e 127.0.0.1:6380 myself,master  -                                        0 0             1 connected 0-5460837779b3965e2c9d4dd4385750aaaaf9a9039fb0 127.0.0.1:6382 master         -                                        0 15606907021143  connected 10923-16383ad151680a3e36cf2083ef822be0bdb075a7d36de 127.0.0.1:6384 slave          b4d120f2983ad683f7b68992e1ba414722238db7 0 1560690705116 5 connected9a2260a5a6a2add84b622a453a6a7b86a29d180d 127.0.0.1:6385 slave          837779b3965e2c9d4dd4385750aaaaf9a9039fb0 0 1560690703615 6 connectedb4d120f2983ad683f7b68992e1ba414722238db7 127.0.0.1:6381 master         -                                        0 15606907071152  connected 5461-10922127.0.0.1:6380> dbsize(integer) 0127.0.0.1:6380>

五、原理

使用的是官方Redis Cluster 方案(服务端路由查询)

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

Redis Cluster是一种服务端Sharding技术,3.0版本开始正式提供。Redis Cluster并没有使用一致性hash,而是采用slot(槽)的概念,一共分成16384个槽。将请求发送到任意节点,接收到请求的节点会将查询请求发送到正确的节点上执行

分布式寻址算法

  • hash 算法(大量缓存重建)
  • 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡)
  • redis cluster 的 hash slot 算法

优点

  • 无中心架构,支持动态扩容,对业务透明
  • 具备Sentinel的监控和自动Failover(故障转移)能力
  • 客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
  • 高性能,客户端直连redis服务,免去了proxy代理的损耗

缺点

  • 运维也很复杂,数据迁移需要人工干预
  • 只能使用0号数据库
  • 不支持批量操作(pipeline管道操作)
  • 分布式逻辑和存储模块耦合等

关于 slot 的说明

每个Redis集群中总共有16384个slot(简单理解为一个范围),当有一个K V键值对想被放入集群时,首先对key进行计算,看此值属于哪个slot(范围),这一对键值对就会被放入哪个master中,因为此机制,redis集群才能实现水平扩容。

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

可以看到5493值被放入了6381,正好符合上面的slot。

关于Redirected说明

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

如果要get的值或者set的值不在此次连接的实例上,因为redis的无中心化配置,将会切换到对应的实例上。

当master故障会如何

关闭 6381 实例

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

当 6381 故障时,我们任然可以从 6384 实例获取到 testk1 的value

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

可以看到 6384 实例被提升为 master 了。 当 6381 重启时,角色将从 master 转为 slave。

如果某一节点的 master – slave 全部挂掉了,集群是否还可用?此时我们关掉 6381 与 6384

Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

所以,此处在配置文件总的配置cluster-require-full-coverage如果设置为yes时,整个集群也会down。

如果配置为no, 那么集群可以使用,该slot范围无法再存储与读取数据。

内容参考学习:

在Windows系统下搭建Redis集群

Redis集群(windows版本操作)

搜索

复制

Original: https://www.cnblogs.com/xxhxs-21/p/16469550.html
Author: 花祈梦
Title: Redis八:Windows环境下的Redis集群搭建-官方Redis Cluster 方案(服务端路由查询)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588602/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 按部就班的写作方法

    1.计划 阶段目标:拟定一份大纲 ① 收集想法。 ② 选择布局。 ③ 选择引言和结论。 ④ 留意那些观点需要证实,以及你将怎么证实他们。 2.起草 阶段目标:写出一份草稿 ① 在起…

    Java 2023年6月5日
    081
  • Linux命令tar的压缩与解压

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只…

    Java 2023年6月7日
    078
  • Java中类变量(静态变量)和类方法(静态方法)

    类变量 类变量也叫静态变量或静态属性,是该类所有对象共享的变量任何一个该类的对象去访问它时,取得都是一样的值 语法: 访问修饰符 static 数据类型 变量名 static 访问…

    Java 2023年6月6日
    098
  • mqtt实现跨平台跨应用通讯

    介绍 最近物联网应用一直很火,也打算做一些这方面的尝试,就边学边做在家花了2天时间做了一个简单demo,功能很简单,使用emq x 作为mqtt broker,用python写了一…

    Java 2023年5月30日
    0103
  • 程序员最容易读错的单词,听到status我炸了

    最近在跟同事讨论问题的时候,他突然对我说。。。 这个 死太丢死不太对,需要改一下。。。 我当时应该是愣住了,然后想了一下,你说的是 status 吗??? 看着他疑惑不解的眼神,我…

    Java 2023年6月13日
    072
  • centos7.5安装Oracle11gR2

    centos7.5安装Oracle11gR2 说明:由于上一台旧的笔记本电脑(CPU:i5-7200,内存:8G,硬盘:128SSD+1T机械)卸任,所以打算在家搭建一个个人服务器…

    Java 2023年6月8日
    072
  • jnpf javacloud 微服务配置运气记录

    jnpf过程 服务说明 服务 默认端口 描述 nacos 30099 服务注册、发现和配置中心 sentinel-server 30098 流量控制、熔断降级、系统负载保护 sea…

    Java 2023年5月29日
    074
  • java技术难点

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月29日
    086
  • 【Q&A】sln 修改导致linux所有命令无法使用

    场景 在Centos 服务器上按照 abp命令,然后执行 abp –version命令报一下错误: abp: relocation error: /lib64/libc.so.6…

    Java 2023年6月8日
    081
  • Spring boot——Actuator 详解

    management.health.status.http-mapping.FATAL=503 如果你需要更多的控制,你可以定义自己的 HealthStatusHttpMapper…

    Java 2023年5月30日
    079
  • 4、spring+springMVC+mybaits+idea+maven

    1、构建项目结构如下 2、构建项目中的pom.xml文件中的依赖资源,里面包含ajax和分页插件的依赖哦 1 <?xml version="1.0" en…

    Java 2023年6月13日
    068
  • Java 将HTML转为XML

    本文介绍如何通过Java后端程序代码来展示如何将html转为XML。此功能通过采用Word API- Free Spire.Doc for Java 提供的 Document.sa…

    Java 2023年5月29日
    084
  • JavaBean实体类

    就是实体类 JavaBean有特定的写法: 必须要有一个无参构造 属性必须私有化 必须有对应的get/set方法 一般用来和数据库的字段做映射:ORM ORM:对象关系映射 表&#…

    Java 2023年6月13日
    077
  • Exception in thread “main” java.lang.StackOverflowError at java.util.ArrayList$SubList.rangeCheckForAdd(Unknown Source)

    Exception in thread “main” java.lang.StackOverflowError at java.util.ArrayList…

    Java 2023年5月29日
    077
  • java RSA生成公钥和私钥

    1.随机生成密钥对 /** * 随机生成密钥对 * @throws NoSuchAlgorithmException */ public static void genKeyPai…

    Java 2023年6月16日
    0106
  • Spring Cloud GateWay 简单示例

    前提:提供一个注册中心,可以使用Eureka Server。供gateway转发请求时获取服务实例。 一、新建GateWay项目 1、引入maven依赖 org.springfra…

    Java 2023年5月30日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球