3. redis常见部署架构

redis常见部署架构

  • 一、redis常见部署架构
    • 1、常见部署架构
    • 2、多实例部署
      • 2.1 规划安装目录、配置文件
      • 2.2.2 编辑实例配置文件
      • 2.2.3 启动实例
      • 2.2.4 测试数据读写
    • 3、redis主从复制
      • 3.1 规划
      • 3.2 从服务器配置
      • 3.3 验证主从状态
      • 3.4 主从角色切换
    • 4、分片集群
      • 4.1 原理
      • 4.2 分片集群的部署
        • 4.2.1 两台服务器安装redis
        • 4.2.2 配置redis实例
        • 4.2.3 创建分片集群
        • 4.2.5 连接集群测试数据读写
    • 5、哨兵集群
    • 6、Redis哨兵模式的配置
        • 准备环境
        • 主从节点配置
        • 哨兵节点配置
        • 启用哨兵
        • 启动sentienl,系统会在配置文件中自动写入哨兵的id、链接信息,主从节点信息和其他哨兵信息。如下sentinel-26380.conf启动后的完整信息:
        • 关掉端口号为6381的redis主服务器程序
        • 端口号为6382的服务器成为了主服务器

一、redis常见部署架构

1、常见部署架构

多实例部署
主从复制
分片集群
哨兵集群

2、多实例部署

安装目录: /opt/6380 端口: 6380
安装目录: /opt/6381 端口: 6381

2.1 规划安装目录、配置文件

[root@localhost ~]# mkdir -p /opt/638{0,1}/{conf,data} 
[root@localhost ~]# 
[root@localhost ~]# cp /usr/local/redis50/conf/redis.conf /opt/6380/conf/
[root@localhost ~]# 

2.2.2 编辑实例配置文件

[root@localhost ~]# vim /opt/6380/conf/redis.conf 
bind 192.168.140.10
port 6380
daemonize yes
appendonly yes
pidfile /var/run/redis_6380.pid
loglevel warning
logfile "/var/log/redis_6380.log"
dbfilename dump_6380.rdb
dir /opt/6380/data
appendfilename "appendonly_6380.aof"

2.2.3 启动实例

[root@localhost ~]# redis-server /opt/6380/conf/redis.conf 
[root@localhost ~]# redis-server /opt/6381/conf/redis.conf [root@localhost ~]# netstat -tunlp | grep redis
tcp        0      0 192.168.140.10:6380     0.0.0.0:*               LISTEN      1331/redis-server 1 
tcp        0      0 192.168.140.10:6381     0.0.0.0:*               LISTEN      1336/redis-server 1 

2.2.4 测试数据读写

[root@localhost ~]# redis-cli -h 192.168.140.10 -p 6380
192.168.140.10:6380> set name martin
OK
192.168.140.10:6380> get name
"martin"
192.168.140.10:6380> exit[root@localhost ~]# redis-cli -h 192.168.140.10 -p 6381
192.168.140.10:6381> set name demon
OK
192.168.140.10:6381> get name
"demon"
192.168.140.10:6381> exit

3、redis主从复制

在主从复制基础上,整合读写分离提升性能
从服务器默认为只读
基于异步的方式进行数据同步
支持一主多从

3.1 规划

192.168.140.10 6380 主
192.168.140.10 6381 从

3.2 从服务器配置

[root@localhost ~]# vim /opt/6381/conf/redis.conf 
replicaof 192.168.140.10 6380
[root@localhost ~]# redis-cli -h 192.168.140.10 -p 6381 shutdown
[root@localhost ~]# 
[root@localhost ~]# redis-server /opt/6381/conf/redis.conf 

3.3 验证主从状态

[root@localhost ~]# redis-cli -h 192.168.140.10 -p 6380
192.168.140.10:6380> set a 100
OK
192.168.140.10:6380> exit
[root@localhost ~]# 
[root@localhost ~]# redis-cli -h 192.168.140.10 -p 6381
192.168.140.10:6381> get a
"100"
192.168.140.10:6381> 
192.168.140.10:6381> set b 20
(error) READONLY You can't write against a read only replica.
192.168.140.10:6381> exit

主服务器状态:

192.168.140.10:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.140.10,port=6381,state=online,offset=360,lag=0
master_replid:58d767e64932f28545096a5a20b217e9787fd0df
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:360
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:360
192.168.140.10:6380> 
192.168.140.10:6380> exit

从服务器状态:

[root@localhost ~]# redis-cli -h 192.168.140.10 -p 6381
192.168.140.10:6381> info replication
# Replication
role:slave
master_host:192.168.140.10
master_port:6380
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:402
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:58d767e64932f28545096a5a20b217e9787fd0df
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:402
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:402
192.168.140.10:6381> 

3.4 主从角色切换

将从服务器提升为主

192.168.140.10:6381> SLAVEOF no one 
OK
192.168.140.10:6381> 
192.168.140.10:6381> info replication
# Replication
role:master
connected_slaves:0
master_replid:87e2111823deba148396441304837a7bdd1d8399
master_replid2:58d767e64932f28545096a5a20b217e9787fd0df
master_repl_offset:584
second_repl_offset:585
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:584
192.168.140.10:6381> 
192.168.140.10:6381> set b 20
OK
192.168.140.10:6381> set c 30
OK
192.168.140.10:6381> set d 30
OK
192.168.140.10:6381> 将配置文件中连接主服务器的信息注释、删除 

4、分片集群

redis 3.x版本开始支持的
作用:所有缓存数据分散存储到不同的redis上,提升读写性能, 提升数据可靠性

4.1 原理

Redis集群使用哈希槽slot进行数据分片

Redis集群有16384个哈希槽, 每个key通过CRC16校验后对16384取模来决定放置哪个槽, 集群的每个节点负责一部分hash槽

举个例子,比如当前集群有3个节点,
在这里插入图片描述
定位数据的算法的优劣势:
优势:简单
劣势:随着集群扩容、缩容,会造成缓存数据丢失

4.2 分片集群的部署

192.168.140.10 3个集群模式的实例 7001 7002 7003
192.168.140.11 3个集群模式的实例 7004 7005 7006

4.2.1 两台服务器安装redis
4.2.2 配置redis实例

实例配置文件参考

bind 192.168.140.10
port 6380
daemonize yes
appendonly yes
pidfile /var/run/redis_6380.pid
loglevel warning
logfile "/var/log/redis_6380.log"
dbfilename dump_6380.rdb
dir /opt/6380/data
appendfilename "appendonly_6380.aof"cluster-enabled yes
cluster-config-file nodes-7001.conf
[root@localhost ~]# sed -ri 's|7001|7002|g' /opt/7002/conf/redis.conf 
[root@localhost ~]# sed -ri 's|7001|7003|g' /opt/7003/conf/redis.conf 
[root@localhost ~]# netstat -tunlp | grep redis
tcp        0      0 192.168.140.10:17001    0.0.0.0:*               LISTEN      1683/redis-server 1 
tcp        0      0 192.168.140.10:17002    0.0.0.0:*               LISTEN      1688/redis-server 1 
tcp        0      0 192.168.140.10:17003    0.0.0.0:*               LISTEN      1693/redis-server 1 
tcp        0      0 192.168.140.10:7001     0.0.0.0:*               LISTEN      1683/redis-server 1 
tcp        0      0 192.168.140.10:7002     0.0.0.0:*               LISTEN      1688/redis-server 1 
tcp        0      0 192.168.140.10:7003     0.0.0.0:*               LISTEN      1693/redis-server 1 [root@localhost ~]# ps -elf | grep redis
5 S root       1683      1  0  80   0 - 39139 ep_pol 11:25 ?        00:00:00 redis-server 192.168.140.10:7001 [cluster]
5 S root       1688      1  0  80   0 - 39139 ep_pol 11:25 ?        00:00:00 redis-server 192.168.140.10:7002 [cluster]
5 S root       1693      1  0  80   0 - 39139 ep_pol 11:25 ?        00:00:00 redis-server 192.168.140.10:7003 [cluster]
0 S root       1701   1228  0  80   0 - 28203 pipe_w 11:27 pts/0    00:00:00 grep --color=auto redis
另外一台服务器配置大致相同 [root@localhost ~]# netstat -tunlp | grep redis
tcp        0      0 192.168.140.11:7004     0.0.0.0:*               LISTEN      1471/redis-server 1 
tcp        0      0 192.168.140.11:7005     0.0.0.0:*               LISTEN      1476/redis-server 1 
tcp        0      0 192.168.140.11:7006     0.0.0.0:*               LISTEN      1481/redis-server 1 
tcp        0      0 192.168.140.11:17004    0.0.0.0:*               LISTEN      1471/redis-server 1 
tcp        0      0 192.168.140.11:17005    0.0.0.0:*               LISTEN      1476/redis-server 1 
tcp        0      0 192.168.140.11:17006    0.0.0.0:*               LISTEN      1481/redis-server 1 
[root@localhost ~]# 
[root@localhost ~]# ps -elf | grep redis
5 S root       1471      1  0  80   0 - 39139 ep_pol 11:33 ?        00:00:00 redis-server 192.168.140.11:7004 [cluster]
5 S root       1476      1  0  80   0 - 39139 ep_pol 11:33 ?        00:00:00 redis-server 192.168.140.11:7005 [cluster]
5 S root       1481      1  0  80   0 - 39139 ep_pol 11:33 ?        00:00:00 redis-server 192.168.140.11:7006 [cluster]
4.2.3 创建分片集群
[root@localhost ~]# redis-cli --cluster create \
> 192.168.140.10:7001 \
> 192.168.140.10:7002 \
> 192.168.140.10:7003 \
> 192.168.140.11:7004 \
> 192.168.140.11:7005 \
> 192.168.140.11:7006 \
> --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.140.11:7006 to 192.168.140.10:7001
Adding replica 192.168.140.10:7003 to 192.168.140.11:7004
Adding replica 192.168.140.11:7005 to 192.168.140.10:7002
M: ed73c1a4724e5961c9291148312f63b83e841e36 192.168.140.10:7001slots:[0-5460] (5461 slots) master
M: d51484815a84d7485bd191b3018b29987f3831b7 192.168.140.10:7002slots:[10923-16383] (5461 slots) master
S: df6f16e2c84aeda6efb60cf5ab98a7ea7928a37e 192.168.140.10:7003replicates 404b8acd3289b80973cafcf6738e079ed0866526
M: 404b8acd3289b80973cafcf6738e079ed0866526 192.168.140.11:7004slots:[5461-10922] (5462 slots) master
S: afc90762e411df0212880fcb4d151fbf84d205f1 192.168.140.11:7005replicates d51484815a84d7485bd191b3018b29987f3831b7
S: 7e3d9c1be77afa0c04c6bfc49056e793d56d575e 192.168.140.11:7006replicates ed73c1a4724e5961c9291148312f63b83e841e36
Can I set the above configuration? (type 'yes' to accept): yes
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost ~]# redis-cli --cluster info 192.168.140.10:7001
192.168.140.10:7001 (ed73c1a4...) -> 0 keys | 5461 slots | 1 slaves.
192.168.140.10:7002 (d5148481...) -> 3 keys | 5461 slots | 1 slaves.
192.168.140.11:7004 (404b8acd...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 4 keys in 3 masters.
0.00 keys per slot on average.
4.2.5 连接集群测试数据读写
[root@localhost ~]# redis-cli -h 192.168.140.11 -p 7004 -c
192.168.140.11:7004> 
192.168.140.11:7004> set name martin
OK
192.168.140.11:7004> set url www.jd.com
-> Redirected to slot [12521] located at 192.168.140.10:7002
OK

5、哨兵集群

作用: 用于一主多从的环境下,目的是提升主服务器的可用性
在这里插入图片描述

6、Redis哨兵模式的配置

准备环境

主从环境,一主多从
至少三台哨兵节点(奇数个,避免脑裂)

主从节点配置

一个主redis实例,配置文件路径:/opt/6380/conf/redis.conf
两个从redis实例,配置文件路径:
/opt/6381/conf/redis.conf
/opt/6382/conf/redis.conf
redis实例配置文件修改见上述主从配置
启动主从节点并测试是否能够进行正常主从配置,测试成功后进行redis哨兵配置

哨兵节点配置

在三个redis目录下创建redis-sentinel目录,用于存放哨兵的配置文件

[root@localhost 6382]# mkdir -p /opt/6380/redis-sentinel
[root@localhost 6382]# mkdir -p /opt/6381/redis-sentinel
[root@localhost 6382]# mkdir -p /opt/6382/redis-sentinel

在data目录下创建三个存放哨兵文件的数据目录

[root@localhost ~]# mkdir -p /opt/6380/data/26380
[root@localhost ~]# mkdir -p /opt/6381/data/26381
[root@localhost ~]# mkdir -p /opt/6382/data/26382

将安装目录下的sentinel.conf文件分别复制到三个redis-sentinel目录下,重命名

[root@localhost ~]# cp redis-5.0.12/sentinel.conf /opt/6380/redis-sentinel/sentinel-26380.conf
[root@localhost ~]# cp redis-5.0.12/sentinel.conf /opt/6381/redis-sentinel/sentinel-26381.conf
[root@localhost ~]# cp redis-5.0.12/sentinel.conf /opt/6382/redis-sentinel/sentinel-26382.conf

编辑sentinel.conf配置文件,主要修改端口、后台启动进程、pidfile、logfile、dir、主从节点地址等,具体可参考如下修改
sentinel-26380.conf

port 26380
daemonize yes
pidfile /var/run/redis-sentinel-26380.pid
logfile "/var/log/26380.log"
dir /opt/6380/data/26380
sentinel monitor mymaster 191.168.140.10 6381 2 //这里的地址和端口号写主服务器的

sentinel-26381.conf

port 26381
daemonize yes
pidfile /var/run/redis-sentinel-26381.pid
logfile "/var/log/26381.log"
dir /opt/6381/data/26381
sentinel monitor mymaster 191.168.140.10 6381 2 //这里的地址和端口号写主服务器的

sentinel-26382.conf

port 26382
daemonize yes
pidfile /var/run/redis-sentinel-26382.pid
logfile "/var/log/26382.log"
dir /opt/6382/data/26382
sentinel monitor mymaster 191.168.140.10 6381 2 //这里的地址和端口号写主服务器的
启用哨兵
[root@localhost ~]# redis-sentinel /opt/6380/redis-sentinel/sentinel-26380.conf 
[root@localhost ~]# redis-sentinel /opt/6381/redis-sentinel/sentinel-26381.conf 
[root@localhost ~]# redis-sentinel /opt/6382/redis-sentinel/sentinel-26382.conf 
启动sentienl,系统会在配置文件中自动写入哨兵的id、链接信息,主从节点信息和其他哨兵信息。如下sentinel-26380.conf启动后的完整信息:
[root@localhost ~]# cat /opt/6380/redis-sentinel/sentinel-26380.conf | grep -v '#' | grep -v '^$'
port 26380
daemonize yes
pidfile "/var/run/redis-sentinel-26380.pid"
logfile "/var/log/26380.log"
dir "/opt/6380/data/26380"
sentinel myid 72f9410b2bc741edaeed261286c0a6bf1242efb8 //哨兵的myid
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 191.168.140.10 6381 2
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
protected-mode no
sentinel current-epoch 0
关掉端口号为6381的redis主服务器程序
root       2412  0.0  1.4 167308 14368 ?        Ssl  16:54   0:00 redis-server 192.168.140.10:6381
[root@localhost 6381]# kill -9 2412
端口号为6382的服务器成为了主服务器
[root@localhost 6381]# redis-cli -h 192.168.140.10 -p 6382
192.168.140.10:6382> info replication
# Replication
role:master
connected_slaves:0
master_replid:93c49286a4b921d25391e39db1f13a0122df7836
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SystemVerilog Interface Class的妙用

前言 Interface Class是在SystemVerilog 2012版本中引入的,但目前在验证中几乎很少采用,大多数验证工程师要么不知道它,要么没有看到使用它的任何好处,这使得Interface Class成为一个未被充分使用和不被重视的特性。本文将举两个…

【越界写null字节】ACTF2023 easy-netlink

前言 最近在矩阵杯遇到了一道 generic netlink 相关的内核题,然后就简单学习了一下 generic netlink 相关概念,然后又找了一到与 generic netlink 相关的题目。简单来说 generic netlink 相关的题目仅仅是将用户态与内核态的交互方式从传统的 ioctl 变成…

【线性代数】SVDPCA

用最直观的方式告诉你:什么是主成分分析PCA_哔哩哔哩_bilibili 奇异值分解singular value decomposition,SVD principal component analysis,PCA 降维操作 pca就是降维后使得信息损失最小 投影在坐标轴上的点越分散,信息保留越多 pca的实现…

Qt5学习笔记(一):Qt Widgets Application项目初探

笔者长期使用MFC开发Windows GUI软件。随着软件向Linux平台迁移的趋势越发明朗,GUI程序的跨平台需求也越来越多。因此笔者计划重新抓一下Qt来实现跨平台GUI程序的实现。 0x01. 看看Qt Widgets Application项目结构 打开Qt5,点击“ New”按钮新建项目。…

Linux shell编程基础

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问 Linux 内核的服务。 Shell 脚本&#x…

网页中生成ZIP文件,Zip 压缩、解压技术在 HTML5 浏览器中的应用

JSZip 是一款可以创建、读取、修改 .zip 文件的 javaScript 工具。在 web 应用中,免不了需要从 web 服务器中获取资源,如果可以将所有的资源都合并到一个 .zip 文件中,这时候只需要做一次请求,这样既减少了服务器的压力&#xff0…

【复现】含能量路由器的交直流混合配电网潮流计算

目录 1 主要内容 2 理论及模型 3 程序结果 4 下载链接 1 主要内容 程序复现《含能量路由器的交直流混合配电网潮流计算》,主要是对算例4.1进行建模分析,理论和方法按照文献所述。能量路由器(ER)作为新兴的电力元器件&#xff…

【机器学习】机器学习引领AI:重塑人类社会的新纪元

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀机器学习引领AI 📒1. 引言📕2. 人工智能(AI)🌈人工智能的发展🌞应用领…

2024 年最新 Python 基于百度智能云实现短语音识别详细教程

百度智能云语音识别 采用国际领先的流式端到端语音语言一体化建模算法,将语音快速准确识别为文字,支持手机应用语音交互、语音内容分析、机器人对话等场景。百度短语音识别可以将 60 秒以下的音频识别为文字。适用于语音对话、语音控制、语音输入等场景…

轻松连接远程服务器SecureCRT for Mac/Windows

SecureCRT是一款功能强大的终端仿真器和文件传输工具,专为网络管理员、开发人员和系统工程师设计。它支持SSH、Telnet、RDP和串口等多种协议,提供安全、高效的远程访问和管理体验。SecureCRT具有多窗口/多标签管理、自定义终端仿真、颜色方案优化等高级功…

【c语言】qsort函数及泛型冒泡排序的模拟实现

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C语言 目录 一、qsort函数 1.回调函数 2.qsort函数 3.void* 指针 二、泛型冒泡排序的模拟实现 1.比较函数的编写 2.交换函数的编写 3.冒泡排序的编写 4…

【TB作品】MSP430F5529 单片机,数字时钟设计与实现,整点时通过蜂鸣器播放音乐进行报时

基于单片机的数字时钟设计与实现 作品名称 基于MSP430单片机的OLED显示数字时钟 作品功能 本作品实现了一个具有时间显示和整点报时功能的数字时钟。通过OLED屏幕显示当前时间,用户可以通过按键设置时间,并在整点时通过蜂鸣器播放音乐进行报时。 作…

WPF Treeview控件开虚拟化后定位节点

不开虚拟化&#xff0c;可以用下面的方法直接定位 <Window x:Class"WpfApplication2.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"Title"Main…

LabVIEW实现汽车逆变器功能测试系统

​介绍了如何利用LabVIEW开发汽车逆变器&#xff08;包括功率板和控制板&#xff09;的自动测试设备&#xff08;ATE&#xff09;&#xff0c;实现对额定800V电压、300A电流的逆变器进行功能测试。系统通过CAN2.0通讯协议&#xff0c;实现电机控制、温度传感器监测、电压校验和…

linux经典例题编程

编写Shell脚本&#xff0c;计算1~100的和 首先vi 1.sh,创建一个名为1.sh的脚本&#xff0c;然后赋予这个脚本权限&#xff0c;使用命令chmod 755 1.sh&#xff0c;然后就可以在脚本中写程序&#xff0c;然后运行。 shell脚本内容 运行结果&#xff1a; 编写Shell脚本&#xf…

IT闲谈-Kylin入门教程

目录 一、引言二、Kylin简介三、环境准备四、安装与配置五、数据导入与建模六、查询与分析七、总结 一、引言 Apache Kylin是一个开源的分布式分析引擎&#xff0c;旨在提供Hadoop/Spark之上的SQL接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据。Kylin通过…

单链表复习 (C语言版)

目录 一.顺序表与链表的区别 二.链表概念 三.单链表 1.单链表的开始与初始化 2.单链表的打印 3.单链表的尾插 重难点&#xff1a;单链表实现时的指针详解 4.单链表的头插 5.单链表的尾删 6.单链表的头删 小结&#xff1a; 7.单链表的查找 8.在指定位置前插入数据 …

王学岗鸿蒙开发(北向)——————(四、五、六)ArkUi声明式组件

普通组件 1,注意&#xff0c;如上图&#xff0c;build只能有一个根节点 2,Entry表示程序的入口 Component表示自定义的组件 Preview表示可以预览 3&#xff0c;图片存放的地方 4&#xff0c; Image组件最好只给宽度&#xff0c;给了高度又给宽度容易失真。 build() {Row() {/…

24考研408大变化,25考研高分上岸规划+应对策略

巧了&#xff0c;我有现成的经验&#xff1a; 数学和专业课的成绩都不高不低&#xff0c;刚好够用&#xff0c;其实408想上岸&#xff0c;不仅仅要学好408&#xff0c;还要学好考研数学&#xff0c;这是我的肺腑之言&#xff0c;我复试的时候&#xff0c;我知道的那些没有进复试…

【SQLAlChemy】常见的数据类型有哪些,Column可选的参数有哪些呢?

常见数据类型与Column参数 常见类型 Integer&#xff1a;整数类型&#xff0c;对应数据库的 int 类型。Float&#xff1a;浮点数类型&#xff0c;对应数据库的 float 类型。它占用 32 位空间。Double&#xff1a;双精度浮点数类型&#xff0c;对应数据库的 double 类型&#…