摘要:
实例要求:1) 编写一个 Netty 群聊系统, 实现服务器端和客户端之间的数据简单通讯(非阻塞)2) 实现多人群聊3) 服务器端: 可以监测用户上线, 离线, 并实现消息转发功能4) 客户端: 通过 channel 可以无阻塞发送消息给其它所有用户, 同时可以接受其它用户发送的消息(有服务器转发得 阅读全文
posted @ 2020-05-03 23:52
IT路上的小白
阅读(1048)
评论(0)
推荐(0)
摘要:
对redisson不熟悉的,请看官网或者github上面的 在Redisson框架中,实现了红锁的机制,Redisson的RedissonRedLock对象实现了Redlock介绍的加锁算法。该对象也可以用来将多个RLock对象关联为一个红锁, 每个RLock对象实例可以来自于不同的Redisson 阅读全文
posted @ 2020-05-03 23:51
IT路上的小白
阅读(2478)
评论(0)
推荐(1)
摘要:
一、Redis实现分布式锁基本原理 主要就是redis的setnx(id,value)指令 在Redis中,有一个不常使用的命令如下所示。 SETNX key value 这条命令的含义就是“SET if Not Exists”,即不存在的时候才会设置值。 只有在key不存在的情况下,将键key的值 阅读全文
posted @ 2020-05-03 23:49
IT路上的小白
阅读(1122)
评论(2)
推荐(3)
摘要:
生成为唯一id一般通用方案 1. UUID:如果只考虑唯一性,是可行的。 缺点: 2. 数据库自增主键 在分布式集群中的缺点: 3. 基于redis生成全局id策略 因为Redis是单线的天生保证原子性,可以使用原子操作INCR和INCRBY来实现 4. snowflake Twitter的分布式自 阅读全文
posted @ 2020-05-03 23:48
IT路上的小白
阅读(659)
评论(0)
推荐(0)
摘要:
1.IO模型,首先对Java网络编程的发展流程回顾一下,最开始的TCP/IP服务器,Java原生IO,到后面的BIO,最后是Netty。 2.Java 共支持 3 种网络编程模型/IO 模式: BIO、 NIO、 AIO 。 Java BIO : 同步并阻塞(传统阻塞型), 服务器实现模式为一个连接 阅读全文
posted @ 2020-05-03 23:46
IT路上的小白
阅读(222)
评论(0)
推荐(0)
摘要:
1.Java NIO 基本介绍 1) Java NIO 全称 java non-blocking IO, 是指 JDK 提供的新 API。 从 JDK1.4 开始, Java 提供了一系列改进的输入/输出的新特性, 被统称为 NIO(即 New IO), 是同步非阻塞的.2) NIO 相关类都被放在 阅读全文
posted @ 2020-05-03 23:45
IT路上的小白
阅读(481)
评论(0)
推荐(0)
摘要:
Java AIO 基本介绍 1) JDK 7 引入了 Asynchronous I/O, 即 AIO。 在进行 I/O 编程中, 常用到两种模式: Reactor 和 Proactor。 Java 的NIO 就是 Reactor, 当有事件触发时, 服务器端得到通知, 进行相应的处理2) AIO 即 阅读全文
posted @ 2020-05-03 23:44
IT路上的小白
阅读(1495)
评论(1)
推荐(1)
摘要:
基本介绍 1) Java 的 NIO, 用非阻塞的 IO 方式。 可以用一个线程, 处理多个的客户端连接, 就会使用到 Selector(选择器)2) Selector 能够检测多个注册的通道上是否有事件发生(注意:多个 Channel 以事件的方式可以注册到同一个Selector), 如果有事件发 阅读全文
posted @ 2020-05-03 23:43
IT路上的小白
阅读(811)
评论(0)
推荐(0)
摘要:
工作原理示意图 1-简单版 Netty 主要基于主从 Reactors 多线程模型(如图) 做了一定的改进, 其中主从 Reactor 多线程模型有多个 Reactor 对上图说明 1) BossGroup 线程维护 Selector , 只关注 Accecpt。2) 当接收到 Accept 事件, 阅读全文
posted @ 2020-05-03 23:41
IT路上的小白
阅读(395)
评论(0)
推荐(0)
摘要:
基本介绍 1) 异步的概念和同步相对。 当一个异步过程调用发出后, 调用者不能立刻得到结果。 实际处理这个调用的组件在完成后, 通过状态、 通知和回调来通知调用者。2) Netty 中的 I/O 操作是异步的, 包括 Bind、 Write、 Connect 等操作会简单的返回一个 ChannelF 阅读全文
posted @ 2020-05-03 23:40
IT路上的小白
阅读(603)
评论(0)
推荐(0)
摘要:
1.编码和解码的基本介绍 :1) 编写网络应用程序时, 因为数据在网络中传输的都是二进制字节码数据, 在发送数据时就需要编码, 接收数据时就需要解码 [示意图]2) codec(编解码器) 的组成部分有两个: decoder(解码器)和 encoder(编码器)。 encoder 负责把业务数据转换 阅读全文
posted @ 2020-05-03 23:39
IT路上的小白
阅读(250)
评论(0)
推荐(0)
摘要:
1) 实例要求: 使用 IDEA 创建 Netty 项目2) Netty 服务器在 6668 端口监听, 浏览器发出请求 "http://localhost:6668/ "3) 服务器可以回复消息给客户端 "Hello! 我是服务器 5 " , 并对特定请求资源进行过滤.4) 目的: Netty 可 阅读全文
posted @ 2020-05-03 23:37
IT路上的小白
阅读(282)
评论(0)
推荐(0)
摘要:
1.Bootstrap、ServerBootstrap 1) Bootstrap 意思是引导, 一个 Netty 应用通常由一个 Bootstrap 开始, 主要作用是配置整个 Netty 程序, 串联各个组件, Netty 中 Bootstrap 类是客户端程序的启动引导类, ServerBoot 阅读全文
posted @ 2020-05-03 23:34
IT路上的小白
阅读(481)
评论(0)
推荐(0)
摘要:
1.基本说明 1) netty 的组件设计: Netty 的主要组件有 Channel、 EventLoop、 ChannelFuture、 ChannelHandler、 ChannelPipe 等2) ChannelHandler 充当了处理入站和出站数据的应用程序逻辑的容器。 例如, 实现 C 阅读全文
posted @ 2020-05-03 23:33
IT路上的小白
阅读(1018)
评论(0)
推荐(1)
摘要:
怎么使用 引入依赖: 1.改pom <dependencies> <!--eureka-server--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netfl 阅读全文
posted @ 2020-05-03 23:32
IT路上的小白
阅读(202)
评论(0)
推荐(0)
摘要:
Redisson框架十分强大,基于Redisson框架可以实现几乎你能想到的所有类型的分布式锁。这里,我就列举几个类型的分布式锁,并各自给出一个示例程序来加深大家的理解。有关分布式锁的原理细节,后续专门撸一篇文章咱们慢慢聊! 1.可重入锁(Reentrant Lock) Redisson的分布式可重 阅读全文
posted @ 2020-05-03 23:30
IT路上的小白
阅读(861)
评论(0)
推荐(0)
摘要:
1 TCP 粘包和拆包基本介绍 1) TCP 是面向连接的, 面向流的, 提供高可靠性服务。 收发两端(客户端和服务器端) 都要有一一成对的 socket,因此, 发送端为了将多个发给接收端的包, 更有效的发给对方, 使用了优化方法(Nagle 算法) , 将多次间隔较小且数据量小的数据, 合并成一 阅读全文
posted @ 2020-05-03 23:29
IT路上的小白
阅读(1186)
评论(2)
推荐(1)
摘要:
前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里。在查询的优化中永远小表驱动大表。 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5;.......) { // 连接数据库 for(int j=1000;......) {} } 如 阅读全文
posted @ 2020-05-03 22:28
IT路上的小白
阅读(621)
评论(0)
推荐(0)
摘要:
前言:本章主要讲解MySQL主从复制的操作步骤。由于环境限制,主机使用Windows环境,从机使用用Linux环境。另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查询相关资料。 1.主从复制的基本原理 slave会从master读取binlog来进行数据同步。主要 阅读全文
posted @ 2020-05-03 22:23
IT路上的小白
阅读(195)
评论(0)
推荐(0)
摘要:
前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识。行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高。 0.准备 #1.创建相关测试表tb_innodb_lock,注意数据库引擎为InnoDB。 drop table if exists t 阅读全文
posted @ 2020-05-03 22:12
IT路上的小白
阅读(267)
评论(0)
推荐(0)
摘要:
前言:锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算机资源(如CPU、RAM、I/O等)的争用外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据并发访问性能的一个重要因素。从这个角度来说,锁对数据 阅读全文
posted @ 2020-05-03 22:01
IT路上的小白
阅读(193)
评论(0)
推荐(0)
摘要:
前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能。 1.如何开启 #1.通过my.cnf配置开启该功能。 注:对my.cnf文件配置后,需重启mysql。 ①通过命令查看全局查询日志是否开启成功。 ②查看全log_globalquery.log文 阅读全文
posted @ 2020-05-03 21:42
IT路上的小白
阅读(165)
评论(0)
推荐(0)
摘要:
前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。 1.分析步骤 #1.开启Show Profile功能,默认该功能是关闭的,使用前需开启。 #2.根据MySQL高级知 阅读全文
posted @ 2020-05-03 21:39
IT路上的小白
阅读(222)
评论(0)
推荐(0)
摘要:
前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用。 0.准备 #1.创建tb_dept_bigdata(部门表)。 create table tb_dept_bigdata( id int unsigned primary key auto_increment, deptn 阅读全文
posted @ 2020-05-03 21:34
IT路上的小白
阅读(1708)
评论(2)
推荐(0)
摘要:
前言:慢查询日志是MySQL提供的一种日志记录,它记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的sql语句,该sql语句会被记录到慢查询日志中。慢查询日志主要与explain进行联合分析。 1.如何开启慢查询日志 默认情况下,MySQL数据库没有开启慢查 阅读全文
posted @ 2020-05-03 21:27
IT路上的小白
阅读(174)
评论(0)
推荐(0)
摘要:
前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index。 0.准备 #1.创建test表。 drop table if exists test; create table test( id int primary k 阅读全文
posted @ 2020-05-03 21:17
IT路上的小白
阅读(380)
评论(0)
推荐(0)
摘要:
前言:该篇随笔通过一些案例,对索引相关的面试题进行分析。 0.准备 #1.创建test表(测试表)。 drop table if exists test; create table test( id int primary key auto_increment, c1 varchar(10), c2 阅读全文
posted @ 2020-05-03 21:01
IT路上的小白
阅读(527)
评论(0)
推荐(0)
摘要:
前言:索引优化的目的主要是让索引不失效,本篇通过相关案例对索引优化进行讲解。 0.准备 创建经典的tb_emp表 DROP TABLE IF EXISTS `tb_emp`; CREATE TABLE `tb_emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, 阅读全文
posted @ 2020-05-03 20:39
IT路上的小白
阅读(194)
评论(0)
推荐(0)
摘要:
0.准备 首先创建三张表:tb_emp(职工表)、tb_dept(部门表)和tb_desc(描述表) 1)tb_emp表。 DROP TABLE IF EXISTS `tb_emp`; CREATE TABLE `tb_emp` ( `id` int(11) NOT NULL AUTO_INCREM 阅读全文
posted @ 2020-05-03 20:09
IT路上的小白
阅读(207)
评论(0)
推荐(0)
摘要:
1.关于MySQL的一些文件 MySQL如何安装、如何配置自启动,这里不进行讲述,可自行搜索相关安装教程进行处理。这里主要介绍MySQL的主要配置文件。 ①二进制日志log-bin:用于主从复制。 ②错误日志log-error:默认关闭,记录严重的警告和错误信息,每次启动和关闭的详细信息等。 ③查询 阅读全文
posted @ 2020-05-03 19:58
IT路上的小白
阅读(222)
评论(0)
推荐(0)
摘要:
点击:Wiki 查看 阅读全文
posted @ 2020-05-03 19:49
IT路上的小白
阅读(114)
评论(0)
推荐(0)
摘要:
前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。 注:本系列随笔如无特殊说明都MySQL版本都为5.7.22。 1.explain的作用 通过explain+sq 阅读全文
posted @ 2020-05-03 18:20
IT路上的小白
阅读(232)
评论(0)
推荐(0)
摘要:
前言:索引在sql调优部分占据着重要的位置,了解并深入索引对我们来说也是非常重要的。本篇主要介绍MySQL中索引的相关知识点。 1.索引是什么 MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构。因此索引的本质就是数据结构。索引的目的在于提高查询效率,可类比字典、书 阅读全文
posted @ 2020-05-03 17:45
IT路上的小白
阅读(156)
评论(0)
推荐(0)
摘要:
前言:该篇主要对MySQL中join语句的七种情况进行总结。 0.准备 join主要根据两表或多表之间列的关系,从这些表中进行数据的查询。 首先创建两张表:tb_emp(员工表)和tb_dept(部门表),并插入相关测试数据。 1.tb_emp表 DROP TABLE IF EXISTS `tb_e 阅读全文
posted @ 2020-05-03 17:08
IT路上的小白
阅读(695)
评论(0)
推荐(0)
摘要:
本文基于mysql5.5版本进行讲解。 1.关于MySQL的一些文件 MySQL如何安装、如何配置自启动,这里不进行讲述,可自行搜索相关安装教程进行处理。这里主要介绍MySQL的主要配置文件。 ①二进制日志log-bin:用于主从复制。 ②错误日志log-error:默认关闭,记录严重的警告和错误信 阅读全文
posted @ 2020-05-03 17:02
IT路上的小白
阅读(126)
评论(0)
推荐(0)

浙公网安备 33010602011771号