- 博客(151)
- 收藏
- 关注
原创 RabbitMQ 学习 -->> 5、Work Queues 轮询
5、Work Queues 轮询工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。工作进程就相当于消费者RabbitMQ 工作时会采取轮询机制完成消息消费,保证每个消息都会被消费并且只被消费一次,消费者之间是竞争关系,轮流抢夺消费信息。开启两个工作进程,由一个生产者发送大量消息,观察轮询机制Work
2022-07-18 16:28:41 387
原创 RabbitMQ 学习 -->> 4、HelloWorld
4、HelloWorld使用 Java 和 RabbitMQ ,发送单个消息的生产者和接收消息并打印的消费者。beanpublic class ConnectionBean { private String host; private String username; private String password; private String queuename; private String message; public String get
2022-07-18 16:28:29 251
原创 RabbitMQ 学习 -->> 2、RabbitMQ -> 工作模式和相关名词
3、rabbitmq 的六种工作模式simple简单模式simple简单模式为一个队列中一条消息,只能被一个消费者消费。work工作模式Work工作模式为一个生产者,多个消费者,每个消费者获取到的消息唯一。publish/subscribe订阅模式publish/subscribe订阅模式为一个生产者发送的消息被多个消费者获取。routing路由模式routing路由模式为生产者发送的消息主要根据定义的路由规则决定往哪个队列发送。topic 主题模式topic
2022-07-18 16:28:13 249
原创 RabbitMQ 学习 -->> 2、RabbitMQ
2、RabbitMQ1、RabbitMQ 的概念RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包 裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是 一个快递站,一个快递员帮你传递快件。RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收, 存储和转发消息数据2、四大核心概念生产者产生数据发送消息的程序是生产者 交换机 交换机是 RabbitMQ 非常重要的一个部件,一方面它接收来自
2022-07-18 16:27:41 149
原创 RabbitMQ 学习 -->> 1、MQ 的相关概念
1、MQ 的相关概念1、什么是 MQ MQ(message queue),从字面意思上看,本质是个队列 , 遵循FIFO 先入先出,只不过队列中存放的内容是 message 而已,还 是一种跨进程的通信机制,用于上下游传递消息 。在互联网架构中,MQ 是一种非常 常见的**上下游“逻辑解耦+物理解耦”**的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不 用依赖其他服务。2、为什么用 MQ流量削峰(消峰)举个例子,如果订单系统最多能处理一万次订单,这个处理能力
2022-07-18 16:27:02 232
原创 Redis 6 的新功能
15、Redis 6 的新功能1、ACLRedis ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。在Redis 5版本之前,Redis 安全规则只有密码控制 还有通过rename 来调整高危命令比如 flushdb , KEYS* , shutdown 等。Redis 6 则提供ACL的功能对用户进行更细粒度的权限控制 :接入权限:用户名和密码可以执行的命令可以操作的 KEY命令acl list展现
2022-07-18 16:26:48 123
原创 Redis 学习 --->>> 14、Redis 应用的问题和解决方式 -> 分布式锁
4、分布式锁随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的Java API并不能提供分布式锁的能力。为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题!【就是说在一个服务器上的锁在整个集群都有用】实现方案基于数据库实现分布式锁基于缓存(Redis等)基于Zookeeper每一种分布式锁解决方案都有各自的优缺点:性能:redis最
2022-07-18 16:26:31 197
原创 Redis 学习 --->>> 14、Redis 应用的问题和解决方式:缓存穿透、缓存击穿、缓存雪崩
14、Redis 应用的问题和解决方式1、缓存穿透key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。解决方案一个一定不存在缓存及查询不到的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。解决方案:对空值缓存:如果一
2022-07-18 16:26:13 82
原创 Redis 学习 --->>> 13、Redis 集群 -> 集群故障恢复和java开启集群、集群的优缺点
6、集群故障恢复如果在运行过程中有一个机器宕机了,你遵循了一个节点一个服务器,中从分开。这样当前节点的从服务器就会顶替主服务器成为主服务器,以前的主服务器修好了重启也是从服务器。关闭一个服务器查看集群信息7f5250c87ffd7c82b187878e3939be731d557deb 192.168.126.129:6379@16379 master,fail - 1648631325134 1648631322000 1 disconnectedfe9b7bae11d2907b3c5f
2022-07-18 16:25:58 171
原创 this beta version of Typora is expired, please download and install a newer version.Typora
需要电脑上有 Python 环境,配置好python和pip命令的环境变量,测试一下这些命令能不能用。去下面的地址下载 zip 文件,用 git 也行然后不管是压缩包还是git下载下来的文件夹,解压到一个目录里面,然后打开这个目录,进入cmd命令行工具,执行命令然后出现 successfully 后再执行命令然后在当前文件夹下,会生成 dec_app 文件夹,查看 dec_app 目录的 License.js 文件,记事本或者VS Code打开都行。搜索 打开后,进行时间戳的修改;将163712
2022-07-18 16:24:07 181 1
原创 Redis 学习 --->>> 13、Redis 集群
13、Redis 集群redis3.0版本后提供了 无中心化集群配置所谓无中心化集群就是:相较于过去的由反向代理服务器转发请求交给redis服务器完成数据操作,当前的无中心化集群就是直接把请求给redis,让她看着办,集群里面的主node一个操作不了就会自动转交另一个redis服务器。好处就是需要的服务器数量会减少1、什么叫集群Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。Redis 集群通过分区(part
2022-07-13 09:52:42 179
原创 Redis 学习 --->>>12、Redis 主从复制 -> 操作主从复制和常见的主从复制模式
操作主从复制在主服务器中进行写入数据,可以在从服务器中获取查看。但是在从服务中不能做写操作,只能读1、如果主机挂掉将主机关闭,查看从服务器的数据,依旧存在。在重启主机,查看数据依旧存在。2、如果从机挂掉关掉一个从机,进入后查看数据没有了而且查看主从信息。发现他是主机。则需要重新设置从机。再次查看数据,发现已经同步了主机数据。说明成为从机的时候就会复制主机中的所有数据可以将配置增加到文件中。永久生效 在配置文件里面搜 REPLICATION常用的主从复制模式1、一主二仆一个
2022-07-13 09:52:20 253
原创 Redis 学习 --->>> 12、Redis 主从复制 ->了解和配置主从复制
12、Redis 主从复制主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master 以写为主,Slave以读为主他的功能:读写分离,性能扩展容灾快速恢复主从复制、读写分离。让主Redis服务器负责写入操作,从Redis服务器负责被读取配置主从复制1、首先开启daemonize yesPid文件名字pidfile主从配置文件中指定端口portLog文件名字dump.rdb名字dbfilenameAppendonly 关掉或者换名字2、然
2022-07-13 09:52:05 99
原创 Redis 学习 --->>>11、 Redis持久化->2、AOF(Append Only File)
2、AOF(Append Only File)以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作开启 AOF可以在redis.conf中配置文件名称,默认为 appendonly.aofAOF文件的保存路径,同RDB的路径一致。appendonly yes 默认是关闭的R
2022-07-13 09:51:45 220
原创 Redis 学习 --->>> 11、Redis 的持久化->1、RDB(Redis Database)
11、Redis 的持久化Redis 提供了2个不同形式的持久化方式。RDB(Redis DataBase)AOF(Append Of File)1、RDB(Redis Database)在指定的时间间隔内将内存中的数据集快照写入磁盘 , 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接 **读到 ** 内存里备份如何执行Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个
2022-07-13 09:51:16 163
原创 redis 学习 --->>> 9、Redis 事务机制
9、Redis 事务机制1、事务的定义Redis 事务是一个单独的隔离操作: 事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务的主要作用就是串联多个命令防止别的命令插队。2、Multi、Exec、discard从输入Multi命令开始事务,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。组队的过程中可以通过discard来放弃组队中命令的执行。3、事务的错误处理
2022-07-13 09:51:00 198
原创 redis 学习 --->>> 8、Redis 的最新数据类型 -> 3、Geospatial
3、Geospatial1、简介Redis 3.2 中增加了对GEO类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。2、命令geoadd< longitude> [longitude latitude member…]key随便写,后面的参数顺序添加地理位置(经度,纬度,名称)geoadd china:city 106.50 29
2022-07-13 09:50:38 141
原创 redis 学习 --->>> 8、Redis 的最新数据类型 -> 2、HyperLoglog
2、HyperLoglog1、简介在工作当中,我们经常会遇到与 统计相关 的功能需求,比如统计网站PV(PageView页面访问量),可以使用Redis的incr、incrby轻松实现。但像UV(UniqueVisitor,独立访客)、独立IP数、搜索记录数等 需要去重和计数 的问题如何解决?这种求集合中不重复元素个数的问题称为 基数问题 。解决基数问题有很多种方案:数据存储在MySQL表中,使用distinct count计算不重复个数使用Redis提供的hash、set、bitmaps等数
2022-07-13 09:50:16 114
原创 redis 学习 --->>> 8、Redis 的最新数据类型 -> 1、Bitmaps
8、Redis 的最新数据类型1、Bitmaps1、简介Redis提供了Bitmaps这个“数据类型”可以实现对位的操作:Bitmaps本身不是一种数据类型, 实际上它就是字符串(key-value) , 但是它可以对字符串的位进行操作。Bitmaps单独提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。2、命令命令的中 key
2022-07-13 09:49:51 179
原创 redis 学习 --->>> 5、五大常用数据类型 -> 5、redis 哈希(Hash)
5、redis 哈希(Hash)1、简介Redis hash 是一个键值对集合。Redis hash是一个string类型的 field 和 value 的映射表, hash特别适合用于存储对象。类似Java里面的Map<String,Object>用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,每次修改用户的某个属性需要,先反序列化改好后再序列化回去。开销较大。用户ID数据冗余。通过 key(用户
2022-07-13 09:49:26 107
原创 redis 学习 --->>> 5、五大常用数据类型 -> 6、redis 有序集合 Zset (sorted set)
6、redis 有序集合 Zset (sorted set)1、简介Redis有序集合zset与普通集合set非常相似,都是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作
2022-07-10 09:41:55 137
原创 redis 学习 --->>> 6、配置文件
6、配置文件root用户 来到 redis 的解压目录 cd /opt/redis-6.2.6 ,vim reids.conf 。正常是这样的流程但是配置了后台启动方式的redis后,要修改你启动redis时指定的那个redis.conf,我的这个是在 /etc/redis.conf1、Units单位配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit,大小写不敏感2、INCLUDES 部分类似jsp中的include,多实例的情况可以把公用的配置文件提取出来。就是公用配
2022-07-10 09:41:40 160
原创 redis 学习 --->>> 5、五大常用数据类型 -> 4、redis 集合(set)
4、redis 集合(set)1、简介Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择。并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表, 所以添加,删除,查找的复杂度都是O(1)。一个算法,随着数据的增加,执行时间的长短,如果是O(1
2022-07-10 09:41:25 73
原创 redis 学习 --->>> 5、五大常用数据类型 -> 3、redis 列表
3、redis 列表1、 简介单键多值Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。能在一个方向上找到当前值的下级,也能在另一个方向上找到当前值的上级。2、常用命令lpush/rpush …从左边/右边插入一个或多个值。lpop/rpop 从左边/右边吐出一个值。值在键在,值光键亡。吐出来后之就会被删除,真吐出来了
2022-07-10 09:41:12 81
原创 redis 学习 --->>> 5、五大常用数据类型 -> redis 键 和 redis 字符串
redis 常用数据类型操作命令: 官网1、redis 键(key)操作命令返回值 1 就是成功,0 就是有问题没成keys * -> 查看当前库所有key (匹配:keys *1)exists key -> 判断某个key是否存在type key -> 查看你的key是什么类型del key -> 删除指定的key数据unlink key -> 根据value选择非阻塞删除仅将keys从keyspace元数据中删除,真正的删除会在后续异步操
2022-07-10 09:40:54 88
原创 redis 学习 --->>> 3、Redis 安装和启动、关闭
3、Redis 安装和启动、关闭官网 地址Redis 官网发布的是支持 Linux 系统的版本,下载稳定版 Stable ,然后通过xftp拉到 CentOS 中。或者通过命令行安装redis 安装root 用户cd /optwget https://download.redis.io/releases/redis-6.2.6.tar.gzls解压 redis 之前需要系统中有 C 编译环境,所以先要下 C 相关资源yum install gcc -y下载好了后gcc --vers
2022-07-10 09:40:35 293
原创 redis 学习 --->>> 2、Redis 概述
2、Redis 概述Redis是一个 开源的key-value存储系统。和 Memcached 类似,它支持存储的value类型相对更多,包括 string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都 支持push/pop、add/remove及取交集并集和差集及更丰富的操作 ,而且这些 操作都是原子性的 。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率, 数据都是缓存在内
2022-07-10 09:40:16 64
原创 redis 学习 --->>> 1、前言引入
1.1、技术发展1、技术的分类解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis解决性能的问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch2、Web1.0时代Web1.0的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以解决大部分问题。就是普通的单体Web应用。3、Web2.0时代随着We
2022-07-10 09:39:58 78
原创 nginx 学习 --->>> nginx 配置高可用集群
7、配置示例 -> 高可用集群1、什么是 nginx 的高可用已知nginx是一台服务器,所以她会有宕机的风险,而为了预防这个情况就需要准备另一台 nginx 接替这个随时可能宕机的 nginx 的工作。但是nginx是通过监听ip地址端口号接收客户端请求并转发到指定服务器上的。而新的nginx它的系统ip跟宕机的系统ip不一样,所以就要引入一个虚拟ip【她本身不存在】,让 nginx 们都对外经营这一个ip,一个坏了就另一个接着经营【当主服务器宕机后,把虚拟ip就绑定到从服务器上】,这样就不会出
2022-07-10 09:39:23 1483
原创 nginx 学习 --->>> nginx 实现动静分离
6、配置示例 -> 动静分离 Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。 严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。 通过 location 指定不同的
2022-07-10 09:38:53 151
原创 SpringCloudAlibaba 学习 --->>> nacos 学习 -->> 服务注册到集群,出现异常 -> Client not connected,current status:ST
选注册中心是为了验证nacos的各项功能测试\异常启动配置Client模块,很快啊,我就看见一大堆错,内容是这样的,主要有作用的就这三行。ERROR 37644 --- [ restartedMain] c.a.c.n.registry.NacosServiceRegistry : nacos registry, config-client register failed...NacosRegistration....................com.alibaba.nacos.ap
2022-04-26 12:14:26 3941 5
原创 RabbitMQ 学习 -->> 15、搭建 RabbitMQ 集群
15、搭建 RabbitMQ 集群首先去克隆一台或者重新装一台有 RabbitMQ 的虚拟机【有条件的就345678个虚拟机都行,我没条件,只是为了看看效果】准备好两个有RabbitMQ的虚拟机后修改所有虚拟机的主机名,把里面本来的内容换成 node1、2、3、4… 或者其他的名字也一样,你自己记住vim /etc/hostname 要改你准备加入集群全部的虚拟机主机名配置各个节点的ip和主机名,好让他们之间都能找到对方vim /etc/hosts内容,打开
2022-04-14 10:56:31 117
原创 RabbitMQ 学习 -->> 3、RabbitMQ 的安装
3、RabbitMQ 的安装变更日志官网页:地址 点 release notes 进去后拉到底就能看见当前版本文件RabbitMQ 下载地址:地址 点 Assets 里面就是当前版本的各种类型的文件erlang 和 RabbitMQ 版本对应 :地址erlang rpm 包下载 :地址那个rpm文件名中的el后面的数字对应的是centos的版本我的版本:erlang-23.3.4.11-1.el7.x86_64.rpm 和 rabbitmq-server-3.9.14-1.el7.noarch.
2022-04-09 09:04:18 316
原创 RabbitMQ 学习 -->> 9、发布确认 ->以上 3 种发布确认速度对比
以上 3 种发布确认速度对比单独发布消息同步等待确认,简单,但吞吐量非常有限。批量发布消息批量同步等待确认,简单,合理的吞吐量,一旦出现问题但很难推断出是那条消息出现了问题。异步处理:最佳性能和资源使用,在出现错误的情况下可以很好地控制,但是实现起来稍微难些 // 发布1000个单独确认消息,耗时817ms// Task02.publishMessageIndividually(); //发布1000个批量
2022-04-08 19:31:17 1582
原创 nginx 学习 --->>> nginx 实现负载均衡
5、配置示例 -> 负载均衡实现效果:将客户端发出的请求平均分给两个服务器。首先在两个 tomcat 服务器的 webapps 目录下创建一个同名文件夹 edu ,在这个文件夹下分别添加一个同名但是内容有所不同的html文件,用作请求区分返回结果。就是使用 xftp 直接创建目录拉取html文件过去。内容要有区分然后重启两个tomcat服务器。找到 nginx 的配置文件 nginx.confroot 用户cd /usr/local/nginx/confvim nginx.c
2022-04-08 06:43:47 132
原创 nginx 学习 --->>> nginx 实现反向代理
4、配置示例 -> 反向代理首先明确需要做的功能:windows浏览器上发送 www.abc.com 请求后,由 nginx 作为反向代理服务器,然后转发到 CentOS 中的tomcat欢迎页面上。所以需要先在 CentOS 中安装 tomcat 。1、准备工作官网 地址 要么就命令行执行wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.60/bin/apache-tomcat-9.0.60.tar.gz要么就自己去下,然后用xf
2022-04-07 07:13:31 480
原创 nginx 学习 --->>> nginx 原理
8、Nginx 原理1、master-worker 机制在nginx中woker进程之间使用的不是一种轮询的方式而是是争抢机制,因为 nginx 本身不支持 java ,而在实际工作中又需要使用 java 语言,所以,就要先争抢到任务,然后通过反向代理和转发交给tomcat处理好处首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销, 同时在编程及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不
2022-04-06 07:14:49 169
原创 nginx 学习 --->>> nginx 基本概念
1、Nginx 的概念和用途nginx 是高性能的HTTP和反向代理服务器,它具有十分强大的高并发处理能力,可以经受高负载的考验。有报告表明:nginx 可以支持高达 50000 个连接数2、Nginx 中的基本概念:nginx 中主要有:反向代理、负载均衡、动静分离、高可用这些概念。2.1、正向代理先要知道客户端浏览器对代理没有感知,你说它是什么他就是什么,他只管结果在了解反向代理之前先需要知道什么是代理以及正向代理。正常情况下,使用浏览器发送请求访问一个网站资源服务器,是需要通过代理服务
2022-04-05 08:01:28 383
原创 MySQL 学习--->>>5、逻辑运算符
5、逻辑运算符逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1、0或者NULL。运算符作用示例NOT 或 !逻辑非SELECT NOT AAND 或 &&逻辑与SELECT A AND BOR 或 ||逻辑或SELECT A OR B;SELECT A || BXOR逻辑异或SELECT A XOR B;1、逻辑与运算逻辑与(AND或&&)运算符是当给定的所有值均为非0值,并且都不
2022-04-04 08:31:10 140
原创 MySQL 学习 --->>> 4、非符号运算符
4、非符号运算符运算符名称作用示例IS NULL为空运算符判断值或表达式是否为空SELECT 1 IS NULL,NULL IS NULL;IS NOT NULL不为空运算符判断值或表达式是否不为空SELECT I IS NOT NULL,NULL IS NOT NULL;LEAST最小运算符在多个值里面返回最小值SELECT LEAST(‘A’,‘G’,‘P’);GREATEST最大运算符在多个值里面返回最大值SELECT GREATES
2022-04-03 09:34:24 446
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人