java 日志
JDK日志(java.util.logging=jul)从jdk1.4起,JDK开始自带一套日志系统。JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用。 JDK默认的logging配置文件为:$JAVA_HOME/jre/lib/logging.properties,可以使用系统属性java.util.logging.config.file指定相应的配置文件对默认的配置文件进行覆盖,比如, java -Djava.util.logging.config.file=myfile JDK Logging把日志分为如下七个级别,等级依次降低。 级别 SEVERE WARNING INFO CONFIG FINE FINER FINEST 调用方法 severe() warning() info() config() fine() finer() finest() 含义 严重 警告 信息 配置 良好 较好 最好 如果将级别设置为INFO,则INFO后面的不会输出。info前面的...
mysqldump 基本使用
mysqldump 介绍此工具的目的是将数据库导出到备份文件或将数据库移动到另一个 Web 主机。其他带分隔符的文本格式(如 XML 和 CSV)也可以使用 mysqldump 生成。这些简单的查询使备份过程更加容易。文件中的文本显示为一组 SQL 语句,以后可以将其重建为原始状态。 mysqldump 是做什么的? MySQL 数据库备份:使用 mysqldump 创建安全备份,保护您的数据免遭丢失或损坏。 MySQL 数据库版本控制:创建数据库版本,有点像您可以在任何阶段恢复到的 GIT 标签 MySQL 数据库迁移:mysqldump 简化了数据库传输,确保了服务器或环境转换期间的数据完整性。 设置开发环境:mysqldump 有助于复制生产数据,以实现一致且可靠的开发和测试设置。 导出数据的格式 SQL 语句:默认格式会生成一个 SQL 脚本,该脚本可用于重新创建数据库结构和数据。 压缩文件:mysqldump 可以生成 .gz (gzip,linux内置,windows需要单独下载exe文件) 或 .bz2 (bzip2) 等格式的压缩输出文件,从而节省空间。 XML...
mysql 常见错误汇总
MySQL 错误剖析每个 MySQL 错误都由标识错误的以下部分组成: ERROR NUMBER 是标识每个错误的唯一编号。SQLSTATE 是标识 SQL 错误情况的代码。ERROR MESSAGE 以人类可读的格式描述错误。下面是一个 MySQL 错误示例: 1ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist 在上面的示例中: 1146 是错误号 42S02 是 SQLSTATE 表 ‘test.no_such_table’ 不存在是错误消息 用户 ‘root‘@’localhost’ 的访问被拒绝(使用密码:YES)1ERROR 1045: Access denied for user 'root'@'localhost' 任何使用 MySQL 的人都可能至少遇到过一次。此错误可能有多种原因,例如用户名和/或密码错误,或缺少对数据库的权限。 此错误表示 MySQL 服务器在尝试使用提供的密码从 ‘localhost’ 服...
NIO 基础
源码可下载源码路径:https://github.com/coder-xuyong/netty 1. 三大组件1.1 Channel & Bufferchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层 123graph LRchannel --> bufferbuffer --> channel 常见的 Channel 有 FileChannel DatagramChannel SocketChannel ServerSocketChannel buffer 则用来缓冲读写数据,常见的 buffer 有 ByteBuffer MappedByteBuffer DirectByteBuffer HeapByteBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer Ch...
Netty 入门
1. 概述1.1 Netty 是什么?12Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high performance protocol servers & clients. Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端 1.2 Netty 的作者 他还是另一个著名网络应用框架 Mina 的重要贡献者 1.3 Netty 的地位Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE 开发中的地位 以下的框架都使用了 Netty,因为它们有网络通信需求! Cassandra - nosql 数据库 Spark - 大数据分布式计算框架 Hadoop - 大数据分布式存储框架 RocketMQ - ali 开源的消息队列 ElasticSearch - 搜索引擎 gRPC - rpc 框架 Dubbo - rpc 框架 ...
Netty 进阶
Netty 进阶 1. 粘包与半包1.1 粘包现象服务端代码 12345678910111213141516171819202122232425262728293031323334353637383940414243444546public class HelloWorldServer { static final Logger log = LoggerFactory.getLogger(HelloWorldServer.class); void start() { NioEventLoopGroup boss = new NioEventLoopGroup(1); NioEventLoopGroup worker = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.channel(NioS...
优化与源码
优化与源码 1. 优化1.1 扩展序列化算法序列化,反序列化主要用在消息正文的转换上 序列化时,需要将 Java 对象变为要传输的数据(可以是 byte[],或 json 等,最终都需要变成 byte[]) 反序列化时,需要将传入的正文数据还原成 Java 对象,便于处理 目前的代码仅支持 Java 自带的序列化,反序列化机制,核心代码如下 1234567891011// 反序列化byte[] body = new byte[bodyLength];byteByf.readBytes(body);ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(body));Message message = (Message) in.readObject();message.setSequenceId(sequenceId);// 序列化ByteArrayOutputStream out = new ByteArrayOutputStream();new ObjectOutputStream(...
数据库系统概论
数据库系统概论数据库核心术语数据数据是数据库中存储的基本对象,可以对数据做如下定义:描述事物的符号称为数据。 描述事物的符号多种多样,所以数据有多种表现形式。 数据的表现形式还不能完全地表达其内容,需要经过解释,数据和关于数据的解释是密不可分的,每一个数据都有它的意义,数据的解释指的是对数据含义的说明,数据的含义称为数据的语义,数据与其语义是不可分的。 数据库数据库就是存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定格式存放的。 严格的来讲,数据库的含义如下: 长期存储在计算机内,有组织的,可共享大量数据的集合 里面的数据按照一定的数据模型组织,描述和储存 具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享 数据库特点: 永久存储 有组织 可共享 数据库管理系统数据库管理系统(Database Management System, DBMS)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。 用户通过 DBMS 访问数据库中的数据,数据库管理员也通过 DBMS 进行...
Mysql 高可用
Mysql 高可用复制复制是解决系统高可用的常见手段。其思路就是:不要把鸡蛋都放在一个篮子里。 复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。主库和备库之 间可以有多种不同的组合方式。 MySQL 支持两种复制方式:基于行的复制和基于语句的复制。这两种方式都是通过在主库上记录 bin log、在备库重放日志的方式来实现异步的数据复制。这意味着:复制过程存在时延,这段时间内,主从数据可能不一致。 复制如何工作在 Mysql 中,复制分为三个步骤,分别由三个线程完成: binlog dump 线程 - 主库上有一个特殊的 binlog dump 线程,负责将主服务器上的数据更改写入 binlog 中。 I/O 线程 - 备库上有一个 I/O 线程,负责从主库上读取 binlog,并写入备库的中继日志(relay log)中。 SQL 线程 - 备库上有一个 SQL 线程,负责读取中继日志(relay log)并重放其中的 SQL 语句。 这种架构实现了数据备份...
Redis 事件
Redis 事件 Redis 服务器是一个事件驱动程序,服务器需要处理两类事件: 文件事件(file event) - Redis 服务器通过套接字(Socket)与客户端或者其它服务器进行通信,文件事件就是对套接字操作的抽象。服务器与客户端(或其他的服务器)的通信会产生文件事件,而服务器通过监听并处理这些事件来完成一系列网络通信操作。 时间事件(time event) - Redis 服务器有一些操作需要在给定的时间点执行,时间事件是对这类定时操作的抽象。 关键词:文件事件、时间事件 文件事件Redis 基于 Reactor 模式开发了自己的网络时间处理器。 Redis 文件事件处理器使用 I/O 多路复用程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器。 当被监听的套接字准备好执行连接应答、读取、写入、关闭操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。 虽然文件事件处理器以单线程方式运行,但通过使用 I/O 多路复用程序来监听多个套接字,文件事件处理...