自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于策略模式和工厂模式进行代码优化

2.具体的策略类实现。

2023-10-31 16:21:43 150

原创 基于京东开源Hotkey的热key处理

京东hotkey很轻量级,不会修改redis源码,也不用更高redis客户端的jar包,和redis不依赖,是一个完全独立的系统。需要部署一个独立的server,会对key进行探测,进行key的上报,会把热key的值加载到JVM内存中。具有很强的实时性,默认情况下500ms即可探测出key是否热key。一台8核8G的机器,每秒可以处理数千台服务器发来的 高达16万个待测的key,8核8G单机吞吐量每秒在16万。识别到热key之后缓存到电商系统的JVM当中。

2023-09-03 15:34:49 241

原创 使用CompletableFuture减少批量定时任务留存率5万多条数据从1个小时优化到8分钟,解决oracle批量插入问题

批量插入oracle遇到的问题。

2023-08-31 13:15:12 193

原创 snakeyaml从1.30升级2.0版本遇见的坑,解决办法

报错信息2023-08-21 18:48:46,282 INFO [TID: N/A] [main] c.c.f.f.i.p.DefaultApplicationProvider - App ID is set to S20400009 by app.id property from System Property2023-08-21 18:48:46,287 INFO [TID: N/A] [main] c.c.f.f.i.p.DefaultServerProvider - Environment

2023-08-21 20:43:21 5957 2

原创 使用策略模式+工厂模式优化if-else分支判断

1.定义策略接口public interface Strategy { /** * 根据不同的垃圾处理不同的收运逻辑 * @param type * @return */ public String collectGarbage(Integer type);}2.针对不同的逻辑处理实现不同的业务/** * 有害垃圾收运策略 */public class HarmfulGarbageStrategy implements Strategy

2022-02-06 10:38:48 349

原创 使用docker安装RocketMq

1.创建namesrv服务拉取镜像docker pull rocketmqinc/rocketmq创建nameServer存储路径mkdir -p /docker/rocketmq/data/namesrv/logs /docker/rocketmq/data/namesrv/store构建namesrv容器docker run -d \--restart=always \--name rmqnamesrv \-p 9876:9876 \-v /docker/rocketmq/d

2022-01-24 19:06:59 2024

原创 基于redis GEO实现查找附近的门店

1.导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.

2022-01-06 20:49:18 851

原创 基于ES实现车辆经纬度的搜索

1.地理位置不能动态映射自动检测,需要显式声明对应字段类型为geo-point需要显示指定location的类型为geo_point经纬度在ES中的保存的形式可以是字符串(前面的值是纬度,后面的值是经度)、对象(前面的值是纬度,后面的值是经度) 或者数组(前面的值是经度,后面的值是纬度)。GPS的表结构2.es使用2.1 es地理位置实现地理距离过滤器(geo_distance)以给定位置为圆心画一个圆,来找出那些地理坐标落在其中的文档。“distince”:“1km”:找出所有与指

2021-12-30 12:41:30 1575

原创 使用线程池的异步编排合并多个接口的查询数据返回给前端页面

```java //创建一个线程池 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 20, 1L, TimeUnit.SECONDS, new LinkedBlockingDeque<>(50), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); CompletableFuture&.

2021-12-27 21:15:13 688

原创 基于Javaweb实现的教务管理系统

技术实现前端::vue后端::springboot +mysql8.0+mybatisplus+redis6.0package com.stum.web.controller.stum;import java.util.List;import javax.servlet.http.HttpServletResponse;import org.springframework.security.access.prepost.PreAuthorize;import org.springframew

2021-12-15 21:42:33 1434

原创 Mysql

索引是帮助mysql高效获取数据的排好序的数据结构二叉树:右子树总是大于左子树,如果用二叉树存储递增的索引,会出现二叉树的高度很高,查询次数增多,性能下降。如下图所示:

2021-04-14 23:30:37 58

原创 Canal的原理及其使用

1.Cannal的工作原理①cannal模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议②MySQL mater收到dump请求,开始推送binary log给slave(即canal)③canal解析binary log对象2、Canal搭建环境1、准备好MySQL运行环境;2、开启 MySQL的binlog写入功能,配置 binlog-format 为 ROW 模式,my.cnf中配置如下:[mysqld]log-bin=

2020-12-01 18:19:56 1381

原创 总结集合,消息中间件

1.Redis与Mysql如何保证数据一致性问题?①传统的解决方案:直接清理Redis缓存②mysql每次做update、add、del 日志都会记录起来binlog,可以用mq监听binlog是否发生变化,会把发生变化的数据放到消息中间件里面,使用阿里巴巴的cannal+kafka2.消息中间件在高并发情况下,如何保证消息不丢失?①如果消费者没有启动,消息会丢失吗? 不会②消息中间件如果宕机呢,消息会丢失吗?不会 ,默认持久化的③如果消息中间件存放的消息满的情况下,达到消息队列容量阈

2020-10-22 15:25:20 144

原创 spring

在spring中,bean可以被定义成两种模式,prototype(多例)和singleton(单例),默认是singleton(单例)

2020-10-02 11:07:45 100

原创 Rabbitmq总结

如何确保消息不丢失?①为保证消息可靠的到达消费者,RabbitMq提供了发送方确认机制,

2020-08-16 12:32:12 275

原创 Nginx负载均衡以及Nginx限流

Nginx负载均衡策略:1.轮询2.加权轮询:一个服务器的吞吐能力强,一个服务器的吞吐能力弱,根据服务器的资源进行配置3.IP_Hash:会根据我们客户端的IP地址进行hash以后再分配到响应的机器上,这个好处就是当我们在做session共享的这种情况下,我们希望我们的客户端同一时间永远连接到同一台nginx服务器上,固定的IP会连固定的服务器,这样会出现服务挂了session不可用,可以把session放到redis中4.最小链接leastconn(第三方提供的,它是比较智能的,它是根据我们服务器

2020-08-13 21:06:16 538

原创 集合CopyOnWriteArrayList,HashMap,CurrentHashMap

CopyOnWriteArrayList集合:使用ReentrantLock进行加锁是为了保证原子性使用volatile修饰的数组是为了保证可见性和禁止指令重排序但是不能保证原子性HashMapJDK1.7时间复杂度通过链表的方式解决hash碰撞当hash表的容量到达一维数组长度的75%,就会触发扩容...

2020-08-11 15:41:41 235

原创 Mysql数据库优化以及Btree索引,Hash索引介绍

通过Mysql的慢查询日志可以分析出哪些查询是主要的压力来源1.首先通过show variables like 'slow_query_log’来查看慢查询日志是否开始(on表示开启,off表示关闭)2.通过set global slow_query_log=ON开启慢查询日志3.未使用索引的查询也可以被记录到慢查询日志中,on表示开启,off表示关闭4.慢查询阈值(秒级),当查询时间大于设定的阈值时,记录日志设置慢查询的阈值为0,记录所有sql的查询记录5.查看慢查询日志存储路径

2020-08-10 21:47:11 164

原创 volatile关键字,synchronized关键字,ThreadLocal关键字

volatile的作用:①保证共享变量的可见性,不能保证原子性,也不能保证线程安全。②保证所有线程在同一时刻读取到的共享变量值是一致的③如果某个线程对volatile修饰的共享变量进行更新,那么其他线程可以立刻看到这个更新。在JVM底层,volatile是采用内存屏障来实现的(禁止指令重排序)内存屏障:用于实现对内存操作的顺序限制...

2020-06-21 19:57:56 151

原创 JVM内容总结

一个类的生命周期可以分为什么?加载-----------连接-----------初始化-----------使用-----------卸载加载——要完成三件事1.根据全限定名获取二进制字节流2.静态存储结构转换为方法区的运行时数据数据结构3.在Java堆里面生成一个类对象,作为方法区的访问入口连接——包括三个阶段(验证、准备、解析)...

2020-06-15 07:31:29 264

原创 Redis持久化机制

RDB: 快照,把当前的二进制文件存起来通过redis的bgsave和save命令生成RDB文件执行bgsave指令生成RDB的过程:首先判断是否有save,如果有就会停止其中的一个(按照先后顺序,后来的不能执行),创建一个子进程,同时把子父进程分开,子进程执行持久化(生成的RDB是临时文件),父进程执行用户操作。形成持久化文件,会进行压缩校验(开启压缩的时候)AOF:协议文本 记录操作记录,恢复数据常用AOF执行过程:子进程创建一个新文件(在缓冲区),父进程使用新文件替换旧的,这就是AOF持久化

2020-05-31 17:13:06 112

原创 redis配置文件详解

tcp-keepalive 0 #连接时间 默认为0 永不关闭 单位为秒logfile stdout 日志文件名 默认文件名 启动错误:/无日志/有日志没内容/无效内容databases 16 #数据库个数#持久化 操作save 900 1 #900秒1次save 300 10 #300秒10次save 60 10000 #60秒 10000次stop-writes-on-bgsave-error yes #前面存储失败后是否展示

2020-05-30 20:02:11 133

原创 Java线程池原理以及如何使用Guava优化接口的响应速度

线程池原理:当主线程调用execute方法或submit方法提交任务到线程池里面的时候,有空闲核心线程就交给核心线程去处理,核心线程用完,先进入阻塞队列,此时任务没有被执行,核心线程如果空闲就会读取阻塞队列的任务去执行。如果阻塞队列满了,主线程继续提交任务,就会判断当前线程池的容量是否达到了最大线程,如果没有达到最大线程,就会创建新的线程去执行阻塞队列的任务或用户提交的任务。如果达到最大线程就会执行拒绝策略。核心线程的特点:①没有任务的时候,核心线程可以全部创建好②没有任务的时候,核心线程不可以回收线

2020-05-15 08:58:47 1093

原创 JVM垃圾回收算法各个算法的优缺点

引用计数法、标记清除法、标记压缩法、复制算法、分代算法等。1.引用计数器法:假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引用失败时,对象A的引用计数器就-1,如果对象A的引用计数器的值为0,就说明对象A没有引用了,可以被回收。优缺点:优点:1.实时性较高,无需等到内存不够的时候,才开始回收,运行时根据对象的计数器是否为0,来进行回收。2.在垃圾回收过程中,应用...

2020-04-15 15:20:00 1078

原创 Canal工作原理

原理:Canal就相当于mysql的一个从节点,mysql作为主节点,执行增删改的时候,开启二进制日志Binary log,会把增删改的日志写入到日志文件中,Canal会定期读取日志文件的数据,会把数据同步给canal。**注意:**canal是基于mysql的主从模式实现的,所以必须先开启binlog.开启Binary log命令docker exec -it mysql /bin/ba...

2020-03-27 13:57:42 982

原创 nginx的限流

nginx提供两种限流的方式一是控制速率二是控制并发连接数控制速率的方式之一就是采用漏桶算法采用漏桶算法nginx的配置如下图所示:修改/usr/local/openresty/nginx/conf/nginx.confuser root root;worker_processes 1;events {worker_connections 1024;}http {...

2020-03-27 13:40:12 143

原创 OpenResty

OpenResty封装了nginx,并为nginx提供了高性能的可扩展程序,使nginx抗压能力得到了大大的提升,并且提供了Lua脚本的扩展支持,能使nginx抗压能力达到10k-1000k。linux安装openresty:1.添加仓库执行命令yum install yum-utilsyum-config-manager --add-repo https://openresty.org/...

2020-03-25 19:28:37 154

原创 Lua的安装

curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz 下载到本地tar zxf lua-5.3.5.tar.gz 解压cd lua-5.3.5make linux test ...

2020-03-25 19:16:09 99

原创 首页广告的实现思路

1.查询Nginx缓存,如果有缓存,则直接将缓存中的广告返回。2.如果Nginx缓存中没有广告数据,则通过Lua脚本查询Redis,如果Redis有数据,则会将数据存入到Nginx的缓存,并返回查询到的数据。3.如果Redis中也没有缓存,则此时会通过Lua脚本查询Mysql,如果Mysql中有数据,则将数据存入到Redis中并返回查询到数据...

2020-03-25 09:59:11 217

原创 fastdfs

fastdfs

2020-03-21 19:10:42 133

空空如也

空空如也

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

TA关注的人

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