摘要: 网络通信中,最底层的就是内核中的网络I/O模型了。随着技术的发展,操作系统内核的网络模型衍生出了五种I/O模型,《UNIX网络编程》一书将这五种I/O模型分为阻塞式I/O、非阻塞式I/O、I/O复用、信号驱动式I/O和异步I/O。 1. 阻塞式IO 阻塞式I/O,它在每一个连接创建时,都需要一个用户 阅读全文
posted @ 2022-08-24 17:30 言思宁 阅读(854) 评论(0) 推荐(0) 编辑
摘要: 一、Nginx 首先,来看看Nginx的作用与缺陷。 Nginx服务发现 Nginx是一个反向代理组件,那么Nginx需要知道应用服务器的地址是什么,这样才能够将流量透传到应用服务器上,这就是服务发现的过程。 缺陷: 服务器的变动,就需要修改客户端配置后,重启所有的客户端进程,操作时间比较长; 服务 阅读全文
posted @ 2022-08-24 17:27 言思宁 阅读(842) 评论(0) 推荐(1) 编辑
摘要: 1. 如何保证消息不丢失? 消息确认机制 2. 如何保证消息只被消费一次? 为了保证消息丢失,需要付出两方面的代价:一方面是性能的损耗,一方面可能造成消息重复消费。为了保证消息只被消费一次,我们需要保证消费多条消息时所得到的结果就是相同的,即幂等的。消息在生产和消费的过程中都可能会产生重复,所以你要 阅读全文
posted @ 2022-08-24 17:24 言思宁 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 官网SQL优化手段 sql优化没有固定的标准,本质上就是做减法,减少io、cpu等消耗,让sql执行的更快,最终达到我们的性能要求。以下是一些常规性的建议,希望能让大家少踩些坑。 案例:创建10万数据 DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sy 阅读全文
posted @ 2022-08-24 17:21 言思宁 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 主从同步的优点: 读写分离提高数据库并发处理能力 数据备份 高可用性。也就是当服务器出现故障或宕机的情况下,可以切换到从服务器上,保证服务的正常运行。 Binlog&Undolog 二进制日志(Binlog):存储的是一个又一个事件(Event),这些事件分别对应着数据库的更新操作,比如INSERT 阅读全文
posted @ 2022-08-24 17:20 言思宁 阅读(344) 评论(0) 推荐(0) 编辑
摘要: MVCC:多版本并发控制技术。保存数据的历史版本。这样我们就可以通过比较版本号决定数据是否显示出来。 InnoDB中的RC和RR隔离事务是基于多版本并发控制(MVCC)实现高性能事务。一旦数据被加上排他锁,其他事务将无法加入共享锁,且处于阻塞等待状态,如果一张表有大量的请求,这样的性能将是无法支持的 阅读全文
posted @ 2022-08-24 17:19 言思宁 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 优化表设计 表结构要尽量遵循第三范式的原则,让数据结构更加清晰规范,减少冗余字段,同时也减少了在更新,插入和删除数据时等异常情况的发生。 反范式原则。如果分析查询应用比较多,尤其是需要进行多表联查的时候,可以采用反范式进行优化。当冗余信息有价值或者能大幅度提高查询效率的时候,我们就可以采取反范式的优 阅读全文
posted @ 2022-08-24 17:16 言思宁 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 1. 索引的概述 索引可以帮助我们从海量的数据中快速定位想要查找的数据。不过索引也存在一些不足,比如占用存储空间、降低数据库写操作的性能等,如果有多个索引还会增加索引选择的时间。 索引主要有4种,分别是: 普通索引:是基础的索引,没有任何约束,主要用于提高查询效率。 唯一索引:在普通索引的基础上增加 阅读全文
posted @ 2022-08-24 17:16 言思宁 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 事务的特性: A,也就是原子性(Atomicity)。数据操作是不可分割 C,就是一致性(Consistency)。一致性指的就是数据库在进行事务操作后,数据库的完整性约束不能被破坏。 I,就是隔离性(Isolation)。它指的是每个事务都是彼此独立的,不会受到其他事务的执行影响。 D,指的是持久 阅读全文
posted @ 2022-08-24 17:15 言思宁 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 1. 非关联子查询 子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行 例如:假设我们想要知道哪个球员的身高最高,最高身高是多少 select play_name, height from player where height = (select 阅读全文
posted @ 2022-08-24 17:11 言思宁 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 聚集函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。 1. 聚集函数 SQL中的聚集函数一共包括5个: COUNT(role_assist)会忽略值为NULL的数据行,而COUNT(*)只是统计数据行数,不管某个字段是否为NULL。 AVG、MAX、MIN等聚集函数会自动 阅读全文
posted @ 2022-08-24 17:10 言思宁 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 五、DQL——SQL函数 在SQL中我们也可以使用函数对检索出来的数据进行函数操作。 SQL函数会带来的问题: 使用的函数很可能在运行环境中无法工作。大部分DBMS会有自己特定的函数,这就意味着采用SQL函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。 注意大小写规范。 Linux的环 阅读全文
posted @ 2022-08-24 17:09 言思宁 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 1. 筛选案例实操 查询所有最大生命值大于6000的英雄: select name from heros where hp_max > 6000 要查询所有最大生命值在5399到6811之间的英雄: select name from heros where hp_max between 5399 a 阅读全文
posted @ 2022-08-24 17:08 言思宁 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 三、DQL——SELECT 1. 查询列 select name from heros select name, hp_max, mp_max, attack_max, defense_max from heros select * from heros 2. 起别名 select name as 阅读全文
posted @ 2022-08-24 17:06 言思宁 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 在DML中,我们常用的功能是增删改,分别对应的命令是CREATE、DROP和ALTER。 1. 对数据库进行定义 CREATE DATABASE nba; // 创建一个名为nba的数据库 DROP DATABASE nba; // 删除一个名为nba的数据库 2. 对数据表进行定义 CREATE 阅读全文
posted @ 2022-08-24 17:05 言思宁 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 一、概述 SQL有两个重要的标准,分别是SQL92和SQL99,它们分别代表了92年和99年颁布的SQL标准。 E-R(实体-关系)图 它是我们用来描述现实世界的概念模型,在这个模型中有3个要素:实体、属性、关系。 实体就是我们要管理的对象,属性是标识每个实体的属性,关系则是对象之间的关系。 SQL 阅读全文
posted @ 2022-08-24 17:03 言思宁 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 在Java中CompletableFuture用于异步编程, 是 Future API的扩展。异步编程是编写非阻塞的代码,运行的任务在一个单独的线程,与主线程隔离,并且会通知主线程它的进度,成功或者失败。 Future Future 被用于作为一个异步计算结果的引用。提供一个 isDone() 方法 阅读全文
posted @ 2022-08-24 16:58 言思宁 阅读(1127) 评论(0) 推荐(0) 编辑
摘要: ln -s file file.s : 创建一个软链接,软链接就像windows 下基于文件路径创建的快捷方式,软链接行为和 windows 下的快捷方式差不多. -rw-r--r-- 1 sangxiaoqian staff 5 6 12 23:56 a.txt lrwxr-xr-x 1 sang 阅读全文
posted @ 2022-08-24 16:36 言思宁 阅读(64) 评论(0) 推荐(0) 编辑
摘要: fastjson可以自动映射pos_id到posId。 JSON.parseObject(String, Class): 从String到POJO (JSONObject) JSONObject.parseObject(String): 从String到JsonObject (JSONArray) 阅读全文
posted @ 2022-08-24 16:34 言思宁 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 一. 缓存穿透 当热点数据为空时,将会有大量请求到缓存,一旦数据库承受不了用户请求,查询就会变慢,大量的请求也会阻塞在数据库查询上,造成应用服务器的连接和线程资源被占满,最终导致系统崩溃,这样称为缓存穿透。 通常解决方案: 返回空值 我们从数据库中查询到空值或者发生异常时,我们可以向缓存中回种一个空 阅读全文
posted @ 2022-08-24 16:32 言思宁 阅读(13) 评论(0) 推荐(0) 编辑