自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 Leaf框架

文章目录Leaf的模块机制协议源码分析Leaf的模块机制一个Leaf开发的游戏服务器由多个模块组成,模块有一下特点:1、每个模块运行在一个单独的goroutine中2、模块间通过一套轻量的RPC机制通讯(leaf/charpc)游戏服务器在启动时进行模块的注册,例如:leaf.Run( game.Module, gate.Module, login.Module,)这里按顺序注册了game、gate、login三个模块。每个模块都需要实现接口:type Module interfa

2022-03-05 16:49:35 7194

原创 mysql---优化

文章目录优化实战策略一、尽量全值匹配优化实战策略一、尽量全值匹配CREATE TABLE `staffs`( id int primary key auto_increment, name varchar(24) not null default "" comment'姓名', age int not null default 0 comment '年龄', pos varchar(20) not null default "" comment'职位', add_time timestam

2021-11-02 21:35:35 181

原创 mysql---索引与执行计划

文章目录索引入门什么是索引MySQL中的索引索引的分类基础语法执行语法什么是执行语法执行计划的作用执行计划的语法执行计划详解索引入门什么是索引MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。上面的理解比较抽象,举一个例子,平时看任何一本书,首先看到的都是目录,通过目录去查询书籍里面的内容会非常的迅速。上图就是一本金瓶梅的书,书籍的目录是按顺序放置的,有第一节,第二节它本身就是一种顺序存放的数据结构,是一种顺序结构。另

2021-11-01 22:55:57 446

原创 mysql---慢查询

文章目录慢查询什么是慢查询慢查询配置慢查询基本配置慢查询解读慢查询分析慢查询什么是慢查询慢查询日志,顾名思义,就是查询慢的日志,只指MySQL记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。慢查询配置慢查询基本配置1、 slow_query_log 启动停止技术慢查询日志2、slow_query_log_file 指定慢查询日志得存储路径

2021-10-21 23:47:42 156

原创 mysql---业务设计

文章目录业务设计逻辑设计范式设计数据库设计的第一大范式(字段不可拆分)数据库设计的第二大范式(单一主键)数据库设计的第三范式范式设计实战一、用户登录及用户管理二、商品信息三、供应商管理功能四、在线销售功能五、表汇总六、查询练习反范式设计什么叫反范式设计商品信息反范式设计在线销售功能反范式查询练习总结范式化设计优缺点反范式化设计优缺点业务设计逻辑设计范式设计数据库设计的第一大范式(字段不可拆分)1、数据库表中的所有字段都只具有单一属性。2、单一属性的列是由基本数据类型所构成的。3、设计出来的表都

2021-10-19 22:52:57 159

原创 mysql---事务

文章目录什么存储引擎支持事务事务的特性隔离性级别未提交读(READ UNCOMMITED) 导致脏读已提交读(READ COMMITED)导致不可重复读可重复读(REPEATABLE READ)可串行话(SERIALIZABLE)不同隔离性级别在并发环境下的问题什么存储引擎支持事务1、查看数据库引擎是否支持事务(Innodb支持)?show engines;2、查看MySQL当前默认的存储引擎?show VARIABLES LIKE ‘%storage_engine%’;3、查看某张表的存储

2021-10-14 21:23:45 84

原创 mysql---锁

文章目录MySQL中的锁锁的比较MyISAM的表锁共享读锁独占写锁总结MySQL中的锁MySQL的锁机制比较简单其最显著的特点是不同的存储引擎支持不同的锁机制。比如:MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking)。Innodb存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况是采用行级锁。锁的比较1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。2、行级锁:开销大,加锁慢;会

2021-10-12 22:34:10 88

原创 mysql---优化概述、架构与存储引擎

文章目录衡量指标MySqlSlap参数的使用测试一测试二测试三衡量指标TPS: Transactions Per Second(每秒传输的事物处理个数),这是指服务器每秒处理的事务数,支持事务的存储引擎如InnoDB等特有的一个性能指标。QPS: Queries Per Second(每秒查询处理量)同时适用于InnoDB和MyISAM引擎。计算:TPS = (COM_COMMIT + COM_ROLLBACK)/ UPTIMECOM_COMMIT : 表示事务提交数量COM_ROLLBAC

2021-09-27 21:19:50 4868

原创 游戏服务器---事件

  在游戏服务器上,不同模块之间会有关联,比如任务模块,等级的变化会触发不同任务的达成。此时,就要通过事件来关联两个模块。当角色升级的时候,抛出一个升级的事件,监听升级事件的模块就会被触发。先定义事件名public class EventNames { /** 玩家升级事件 */ final static public String EVENT_ROLE_LEVEL_UP = "role_level_up";}定义事件接口,所有的事件集成统一一个接口。public interface IEv

2021-09-13 22:06:18 123

原创 消息中间件---kafka---深入理解kafka

文章目录深入理解kafka集群的成员关系什么是控制器复制-卡夫卡的核心副本类型首领副本跟随者副本工作机制处理请求的内部机制生产者请求深入理解kafka集群的成员关系  Kafka使用 zookeeper来维护集群成员的信息。每个 broker都有个唯一标识符, 这个标识符可以在配置文件里指定, 也可以自动生成。 在 broker启动的时候, 它通过创建临时节点把自己的 ID注册到 zoo-keeper。 Kafka组件订阅 Zookeeper的/brokers/ids路径(broker在 zookee

2021-09-10 21:51:11 1077

原创 消息中间件---kafka---集成springboot

springboot 和kafka的整合添加pom文件<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> &l

2021-09-09 21:54:17 95

原创 消息中间件---kafka---生产者和消费者

文章目录第一个kafka程序生产者发送消息必选属性bootstrap.serverskey.serializervalue.serializer消费者接收消息必选参数group.idkafka的生产者生产者发送消息的基本流程第一个kafka程序生产者发送消息public class HelloKafkaProducer { public static void main(String[] args) { //常量可以去ProducerConfig去查看 Pro

2021-09-09 21:34:33 981

原创 消息中间件---kafka---理论知识

文章目录kafka入门什么是kafkakafka中的基本概念消息和批次主题和分区生产者和消费者、偏移量、消费者群组Broker和集群保留消息为什么选择kafka优点常见场景活动跟踪传递消息收集指标和日志提交日志流处理kafka入门什么是kafka  Kafka可以看成一个流平台,这个平台上可以发布和订阅数据流,并把他们保存起来,进行处理。Kafka有点像消息系统,允许发布和订阅消息流,但是它和传统的消息系统有很大的差异,首先,Kafka是个现代分布式系统,以集群的方式运行,可以自由伸缩。其次,Kafk

2021-09-04 11:38:31 349

原创 设计模式---代理模式

静态代理某个对象提供一个代理,代理角色固定,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。举例子:小明现在想去追小红,但是他害羞不敢直接追,通过小代去追小红。这个时候,小明就是被代理类,小代就是代理类,因为小明要让小代去送公仔、送花、送巧克力,这些行为,小代肯定也是要有的,所以小明和小代是集成同一个接口。最求者和代理者的公共行为:/** *

2021-09-03 17:48:24 75

原创 设计模式---装饰模式

装饰模式定义:动态地给一个对象添加一些额外的职能,就增加功能来说,装饰模式比生成子类更为灵活。举列子:衣服、帽子、鞋子等可以理解为对人的装饰。"Component"是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责(不是必须的)。Decorator装饰抽象类,继承了Component,从外类来拓展Component类的功能,但对于Component来说,是无需知道Decorator的存在的。至于ConcreteDe

2021-09-03 10:39:17 51

原创 消息中间件---RabbitMQ---安装和集群

文章目录RabbitMQ安装安装过程常用端口可能的问题管理RabbitMQ管理日志一般存放位置管理虚拟主机启动和关闭rabbitmq以服务方式以应用程序方式单独关闭RabbitMQ应用用户管理用户权限控制设置用户角色RabbitMQ 的用户角色分类查看RabbitMQ集群RabbitMQ内建集群内建集群的实际目标可以保证消息的万无一失吗?集群中的队列和交换器队列交换器元数据集群中的节点构建我们自己的集群RabbitMQ安装安装过程在Linux(以CentOS7为例)下安装RabbitMQ(版本根据需要

2021-09-01 22:07:54 209

原创 消息中间件---RabbitMQ---springboot的集成

SpringBoot整合RabbitMQpom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.

2021-08-31 20:45:54 62

原创 设计模式---策略模式

策略模式:它定义了算法家族,分别封装起来,让它们之间开源互相替代,此模式让算法的变化,不会影响到使用算法的客户。运用场景:商场收银软件,营业员根据客户所购买的单价和数量,向客户收费。但是根据活动的不同,每次的价格都不一样。比如,全场打八折、全场打五折、满300减100等活动。如果用if-else作处理的话,就显得很累赘,加上如果拓展更多的活动,只能添加更多的分支。CashContext类,是对策略的运用。public class CashContext {//维护着策略类的引用,调用策略,只需要设

2021-08-31 16:47:40 56

原创 消息中间件---RabbitMQ---基础与原生api的使用

文章目录AMQP概论AMQP包括的要素生产者、消费者、消息信道交换机、队列、绑定、路由键AMQP概论AMQP  AMQP是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递信息,并不受客户端/中间件不同产品,不同的开发语言等条件限制。目标是实现一种在全行业广泛使用的标准消息中间件技术,以便降低企业和系统集成的开销,并且向大众提供工业级的集成服务。主要实现有RabbitMQ。包括的要素生产者、消费者、消息  生产者: 消息的创建者,发送到rabbitmq;  

2021-08-28 15:32:47 371

原创 Docker--3--手动打包springboot镜像

文章目录手动打包springboot镜像手动打包springboot镜像  我们需要对业务项目打包发布,一样需要制作成为业务镜像,供运维使用,下面讲述springboot的制作过程:  1、将springboot打好的jar包上传  2、在同级目录下,创建Dockerfile文件,内容如下:3、dockerfile打包业务镜像4、启动镜像,即得到业务运行docker run -d -p 8090:8090 --name member member:v15、浏览器打开页面校验:http

2021-08-18 10:30:07 122

原创 Docker--2--仓库使用、数据管理、Dockerfile使用

文章目录仓库使用Docker官方仓库注册命令使用私有仓库搭建启动配置http传输私服仓库推送镜像commit镜像并上传仓库创建一个Centos容器容器内安装Nginx服务commit服务为一个Nginx镜像启动此Nginx镜像commit 创建镜像方式的本质数据管理docker的文件系统volunme文件挂载的探究volumes-from引用数据卷备份/恢复数据卷删除数据卷Dockerfile使用dockerfile方式创建容器dockerfile基本要素dockerfile指令:nginx镜像制作实战仓

2021-08-17 11:21:25 143

原创 Docker--1--基础命令

文章目录Docker 简介为什么用Docker更快速的交付和部署更高效的虚拟化更轻松的迁移和扩展更简单的管理对比传统虚拟机总结Docker基本概念Docker架构Docker 镜像Docker容器Docker仓库容器、镜像、仓库的运行关系安装Docker卸载CentOS6CentOS7查看Docker版本启动docker设置随系统启动Docker 初体验Docker基本操作容器操作镜像操作镜像与容器原理及用法探究history命令查看镜像层查看镜像文件查看镜像层文件镜像与容器总结容器创建的详解交互式创建容器

2021-08-12 17:58:14 209

原创 消息中间件----ActiveMQ

文章目录JMS和ActiveMQJMS规范JMS对象模型JMS规范中的信息JMS信息模型ActieveMQActiveMQ安装、部署和运行使用ActiveMQ原生APIJMS和ActiveMQJMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,实际上是一套api,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,ActiveMQ而是这个规范的一个具体实现。JMS规范JMS对象模型  1)连

2021-07-19 23:32:15 434

原创 SpringBoot-03-热部署、编译打包、自定义Starter、SpringBoot CTL

一、热部署热部署不会用在生产环境,但对于程序员开发的效率,还是有一定帮助的,所谓的热部署,就是在应用程序在不停止的情况下,实现新的部署spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个Clas

2021-07-02 09:55:58 355

原创 什么是消息中间件

定义消息中间件属于分布式系统中一个字系统,关注于数据的发送和接收,利用高效可靠的异步信息传递机制对分布式系统中的其余各个子系统进行集成。为什么要用消息中间件假设一个电商交易的场景,用户下单之后调用库存系统减库存,然后需要调用物流系统进行发货,如果交易、库存、物流是属于一个系统的,那么就是接口调用。但是随着系统的发展,各个模块越来越庞大、业务逻辑越来越复杂,必然是要做服务化和业务拆分的。这个时候就需要考虑这些系统之间如何交互,第一反应就是RPC(Remote Procedure Call)。系统继续发

2021-06-24 21:06:01 9895 1

原创 SpringBoot-02-事务支持、全局异常处理、Swagger2、日志集成

文章目录事务支持全局异常处理集成Swagger2构建API文档日志集成Logback日志级别日志文件log4j2使用AOP统一处理日志事务支持修改IUserService接口,增加一个新方法batchAdd,在UserServiceImpl增加相应实现类,在实现类中故意产生一个被0整除的异常。public interface IUserService { boolean login(String username,String passwd); boolean register(Str

2021-06-07 19:41:33 138

原创 SpringBoot-01-集成mybatis

第一个springboot项目新建一个普通maven项目创建pom文件,下面用的是2.3.11版本。<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven

2021-06-07 17:27:15 91

原创 工具类Hutool

为了方便开发,一些常用的工具类被放入到gitee上开源供大家使用。最近有看到一个比较好用的工具类Hutool,推荐给大家使用。Hutool官方文档链接gitee详细api文档

2021-05-24 09:58:36 71

原创 Spring-03-注入组件使用

文章目录chapter08:@Value赋值chapter09:@Autowired自动装配chapter08:@Value赋值新建chapter08目录:1,新建Brid.java类public class Bird { private String name; private int age; private String color; public Bird() { } public Bird(String name, int age, St

2021-04-22 10:40:33 105

原创 Spring-02-Bean的生命周期

bean的生命周期:指 bean创建-----初始化----销毁 的过程bean的生命周期是由容器进行管理的。我们可以自定义 bean初始化和销毁 方法: 容器在bean进行到当前生命周期的时候, 来调用自定义的初始化和销毁方法。如何定义和销毁(4种方式):方式一指定初始化和销毁方法 之前在beanx.xml, 可以指定<init-method和destory-mothod>,现在用用注释如何做: 新建chapter07文件夹,在bean文件下建Bikepublic class

2021-04-15 09:51:06 105

原创 Spring-01-基础及组件使用

chapter01: 从xml配置到注解1,创建maven工程2,pom.xml引入spring-context.jar和Junit测试用例包 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId>

2021-04-14 10:50:31 92

原创 JVM-字节码文件解析

什么是字节码指令?操作码+操作数Class文件的总体结构1.魔数2.Class文件版本:主版本,副版本,高版本虚拟机可以解释低版本class文件3.常量池:是class文件的基石。常量池计数器:记录常量池表的大小。常量池计数值从1开始,如果有长度为22,则下标是1-21,0项常量空出来。常量池表:用于存放编译时期生成的各种字面量和符号引用,这个部分内容将在类加载后进入方法区的运行时常量池中存放。A.字面量:文本字符串、声明为final的常量值B.符号引用:类和接口的全限定名、字段的名称和描

2021-04-06 20:12:46 156 1

原创 Redis-07-集群

文章目录一、Redis的分布式二、分布式数据库概念三、集群环境搭建四、节点之间的通信五、 请求路由从定向六、故障转移一、Redis的分布式RedisCluster是redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当遇到单机内存、并发等瓶颈时,可使用此方案来解决这些问题。二、分布式数据库概念1,分布式数据库把整个数据按分区规则映射到多个节点,即把数据划分到多个节点上,每个节点负责整体数据的一个子集,比如我们库有900条用户数据,有3个redis节点,将900条

2021-03-30 16:01:32 63

原创 Redis-06-哨兵模式

一、什么是高可用?解释1:它与被认为是不间断操作的容错技术有所不同。是目前企业防止核心系统因故障而无法工作的最有效保护手段。解释2:高可用一般指服务的冗余,一个服务挂了,可以自动切换到另外一个服务上,不影响客户体验。二、主从模式的缺点,为什么需要哨兵模式?1.主从复制,若主节点出现问题,则不能提供服务,需要人工修改配置将从节点变主节点。2.主从复制主节点的写能力单机,能力有限。3.单机节点的存储能力也有限。三、主从故障如何故障转移(不满足高可用):A.主节点(master)故障,从节点sla

2021-03-26 11:36:20 148

原创 Redis-05-主从复制

主从复制下面是伪主从复制的,正式线上是在不同机房上的。1. 主从复制 a,方式一、新增redis6380.conf, 加入 slaveof 127.0.0.1 6379, 在6379启动完后再启6380,完成配置; b,方式二、redis-server --slaveof 127.0.0.1 6379 c,查看状态:info replication d,断开主从复制:在slave节点,执行6380:>slaveof no one e,断开后再变成主从复制:6380

2021-03-23 17:37:08 43

原创 Redis-04-持久化机制

一、持久化机制redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化,持久化可以避免因进程退出而造成数据丢失。RDB持久化机制RDB持久化把当前进程数据生成快照(.rdb)文件(二进制文件)保存到硬盘的过程,有手动触发和自动触发。手动触发有save和bgsave两命令 :1.save命令:阻塞当前Redis,直到RDB持久化过程完成为止,若内存实例比较大会造成长时间阻塞,线上环境不建议用。2.bgsave命令:redis进程执行fork操作创建子线

2021-03-23 11:53:02 58

原创 Redis-03-性能测试及工具性能

一、慢查询Redis慢查询分析与mysql一样:当执行时间超过阈值,会将发生时间耗时命令记录。redis命令生命周期:发送,排队,执行,返回。慢查询只统计第3个执行步骤时间。慢查询阈值1.动态设置6379:> config set slowlog-log-slower-than 10000 //10毫秒使用config set完后,若想将配置持久化保存到redis.conf,要执行config rewrite2.redis.conf修改:找到slowlog-log-slower-tha

2021-03-22 20:17:22 260

原创 Redis-02-应用场景实战

key的设计:一般以业务、功能模块或表名开头,后跟主键(或能表示数据唯一性的值)例子:用户模块,其中用户ID 001,用户名称bruce,那么Key如何设计?key如何设置,需要留文档,不然后来人不知道你的key是如何设置的,那就gg了。hset user:001 name brucekey为 user:001场景一:文章投票功能模块需求1.用户可以发表文章,发表时默认给自己的文章投了一票。2.用户在查看网站时可以评分进行排列查看。3.用户也可以按照文章发布时间进行排序。4.为节约内存,

2021-03-18 10:43:54 128

原创 HashMap和ConcurrentHashMap的entrySet的区别

问题一:HashMap如果在entrySet过程中调用remove()方法有时候会报错,有时候又不会报错,这是为什么?问题二:为什么ConcurrentHashMap在entrySet过程中调用remove()方法不会报错呢?问题一的原因:下面是报错的代码:public class Test1 { public static void main(String[] args) { Map<Integer, Integer> map1 = new Has

2021-03-15 17:07:23 517 1

原创 Redis-01-命令学习篇

Redis是什么Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的AIP。1.Redis安装在磁盘。2.Redis数据存储在内存。(首先存储在内存,如果要持久化则存在磁盘)一、Redis基本通讯模型执行过程:发送指令 -> 执行命令 -> 返回结果。执行命令:单线程执行,所有命令进入队列,按顺序执行。单线程快原因:纯内存访问,单线程避免线程切换和竞争产生资源消耗,RESP协议简单。问题:如果某个命令执

2021-03-09 10:40:11 99 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除