自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于redis库存刷盘类相关业务实现总结

Redis循环刷库存类的抽奖业务场景

2022-10-21 14:34:47 754 1

原创 【占坑】Redis key设计问题

Redis key的一些设计问题

2022-09-15 13:53:32 495

原创 Caffeine使用时相同的key会造成多个缓存实例的问题

Caffeine相同key重复缓存问题

2022-08-29 18:35:49 866

原创 ELK搭建入门

ELK日志搭建入门

2022-08-09 20:46:38 493

原创 redis bitset的滥用问题

redis bitset内存占用问题

2022-06-09 11:02:13 848

原创 prometheus + grafana 监控Mysql、主机、Redis超简入门

prometheus + grafana 监控mysql、主机

2022-03-29 14:34:52 2457 2

原创 滚动排行榜实现方式小结

介绍所谓滚动排行榜,即不是固定的某一周,某一个月这种起始点在存储和查询时在某一个时间段是固定的。比如近7天榜,近30天榜,随着每一天的变化这个榜单的取值范围是一直在变化的。​那么这个滚动排行榜与一般排行榜在实现上最大的区别在哪呢?以我们最常用的redis实现方案来说,如果是固定周榜, 那么我们在一周内的任一时间点,在产生排行榜数据的时候, 只需要往这个固定的key里存入数据即可。在取值时,也直接一个命令zrevrange即可搞定。因为在这一周中的任一一天,都属于同一周。​但是如果是滚动榜呢,.

2021-11-09 13:23:13 1666

原创 elasticsearch安装

文章目录基本安装安装IK分词器配置重要配置集群配置概念基本安装首先进官网下载对应版本,然后上传到服务器,解压scp elasticsearch-7.15.0-linux-x86_64.tar.gz root@ddf:/opt/es/tar zxvf elasticsearch-7.15.0-linux-x86_64.tar.gz创建对应目录,创建用户并赋予目录权限mkdir -p /opt/es/datamkdir -p /opt/es/logstouch /opt/es/pidus

2021-11-03 13:21:25 893

原创 nacos安装与spring-boot使用

下载下载地址,选择对应版本,这里后续选择的版本是2.0.2https://github.com/alibaba/nacos/tags​解压后到/conf目录下找到文件nacos-mysql.sql, 然后执行sql语句,抄录在下/* * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not .

2021-11-02 17:48:32 1769 3

原创 `@ControllerAdvice`和`@RestControllerAdvice`的使用

@ControllerAdvice和@RestControllerAdvice的使用作用其实两个注解是同一个,只不过一个是针对与@RestController的另一个是针对@Controller的, 前后端分离我们都会使用@RestController, 因此后面直接针对这个来说,两个的区别是@RestController相当于在所有@Controller里的@RequestMapping方法上添加了注解@RequestBody可以简单理解为就是特意为@RestController设计的拦截器, 通过

2021-09-03 17:55:02 1709

原创 线程池的优雅关闭探究

线程池优雅停机方案简介在开发中使用线程池去执行异步任务是比较普遍的操作,然而虽然有些异步操作我们并不十分要求可靠性和实时性,但总归业务还是需要的。如果在每次的服务发版过程中,我们不去介入线程池的停机逻辑,那么很有可能就会造成线程池中队列的任务还未执行完成,自然就会造成数据的丢失。探究注意,本文所有前提是对进程进行下线时使用的是kill我们知道Spring已经实现了自己的优雅停机方案,详细请参考org.springframework.context.support.AbstractApplicati

2021-08-20 10:53:42 2321

原创 不要用占位符去打印异常堆栈信息

简单粗暴,看一下下面几种常见的错误写法,当然这个错误的前提是确实是想打印异常堆栈信息为前提首先来看下error方法的接口定义分析一下上面三种写法的后果异常会被当做参数传递解析成异常的类名入参,所以最终只会打印异常的类名这个写法不标准, 异常要打印,不需要占位符,但是如果只有一个参数的话不会有影响这个其实和1是一样的概念, 如果确实不想打印异常堆栈,这种写法没有问题, 如果想打印异常堆栈, 则应该只需要一个占位符, 然后传递业务参数,最后传异常类总结// 只打印异常堆栈log.erro

2021-06-02 14:52:58 1372 1

原创 使用ForkJoin批量插入造大量数据

事出有因很多时候为了测试一些接口或者大量数据迁移等测试方面相关的时候,就会需要大量的数据,而这块数据本身的质量其实是不关心的。当然为了这个需求直接写Java代码看起来是有点成本较高的,不过谁让咱只会写Java呢。模拟开搞首先,插入数据需要两部分,一个是要执行的sql, 一个是数据源,这个看自己情况决定使用哪个,我这里为了简单,直接使用JdbcTemplate, 可以按照实际情况自行决定。新建一个fork-join的拆分后执行的子任务/** * <p>任务数据源</p &

2021-04-30 18:49:44 1065 1

原创 SpringBoot配置swagger

引入依赖<properties> <swagger.version>2.9.2</swagger.version> <swagger-ui.version>2.9.2</swagger-ui.version> <swagger-annotation-models-version>1.5.21</swagger-annotation-models-version></p

2021-04-03 18:29:34 133

原创 SpringBoot项目配置线程池

其实配置线程池没什么好讲的,就那几个参数,不过在项目包中提供了一个帮助类,可以方便的只用传参数,方法内部去构建线程池对象,避免配置多个线程池时每个方法内部产生大量重复代码.准备Spring提供了一些类可以帮助我们快速构建线程池bean对象。基于线程池任务的org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor基于定时任务使用的调度线程池对象org.springframework.scheduling.TaskSchedule

2021-04-03 18:04:04 580

原创 SpringBoot如何自定义拦截器

前言mvc这一块的功能有点啰嗦了,写起来如果只是配置的话,其实很简单,还是贴出来官方文档地址,后面就不会的单独说这块的内容了。https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-config实现第一种实现是基于https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-config-inte

2021-04-03 17:36:47 327

原创 SpringBoot如何配置全局跨域

参考首先贴出来官网文档给的例子https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-cors这里把各个解决思路都写出来了全局跨域配置存在的一些问题全局跨域官方给的第一种方案是下面这个样子, 例子在https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-cors-global-java。

2021-04-03 17:09:53 742 5

原创 SpringBoot项目实用功能之如何自定义参数解析器

核心点实现接口org.springframework.web.method.support.HandlerMethodArgumentResolversupportsParameter 方法根据当前方法参数决定是否需要应用当前这个参数解析器resolveArgument 执行具体的解析过程将自实现的参数解析器类添加到Spring容器中实现org.springframework.web.servlet.config.annotation.WebMvcConfigurer接口的addArgum

2021-04-03 16:31:20 317

原创 超简单入门安装Charles配置ios抓取https数据包

废话不多说,直接上步骤,如何安装并配置抓包软件下载安装没什么好说的,网上去下载CharlesCharles配置首先在PC上安装根证书, 根据提示一路下一步即可,没什么特别的配置代理设置 Proxy -> Proxy Settings., 一般端口都是8888,这里按需修改确认即可。IOS手机配置首先要保证, ios和pc在一个局域网内,然后打开手机的无线局域网功能,找到对应的无线网,然后点击i那个图标进入详情找到配置代理,进入后改为手动手动设置代理信息,端口即上面PC端配

2021-04-02 23:04:31 579

原创 基于springboot+redis+lua开发一个可定制扩展的限流组件

前言代码就不在这个文章里面贴了,直接指向git仓库地址,因为贴出来既占空,又阅读不方便。毕竟代码量也不算少。这块实现在下面这个路径,没有贴项目地址,而是其中一个模块的一个包,这样方便阅读,就在这个包里。传送门其实整个开发更像是如何去实现一个自己的组件,且要发散思维,怎么让它可扩展,直接直接作为依赖包让项目直接引用。后面基本上其实是实现了这个目的的,但基于一些项目上代码可读性的考虑,有几个地方没有这么处理,否则代码会散落在各个地方。但其实核心的地方都已经实现了。目标轻依赖,项目级别不大的话,没必要

2021-03-29 22:20:09 271

原创 发个吐槽也不行吗

就想发个吐槽文章也不行吗?

2021-03-23 22:42:40 62

原创 arthas The telnet port 3658 is used by process

启动arthas之后, 选择要attach的进程之后控制台报错内容如下:[INFO] arthas home: /root/.arthas/lib/3.5.0/arthas[ERROR] The telnet port 3658 is used by process 27820 instead of target process 24012, you will connect to an unexpected process.[ERROR] 1. Try to restart arthas-boot,

2021-03-19 13:53:49 10493

原创 被先更新数据库,再删除缓存问题数据不一致原因搞大了头

这篇文章不会去讨论是先删缓存还是先更新数据库这个问题,而是只聊其中一个,个人采用的,我觉得或者大部分人都觉得最优的一个的方案,即先更新数据库,再删除缓存然而再聊到这个方案的弊端的时候,充斥着大量的文章来解释这个方案带来的缓存不一致的原因如下,我看了半天尽量用自己理解下来的话说的清楚点。线程1执行查询操作, 未命中缓存,然后查询数据库得到db中结果。线程2执行更新数据库操作, 然后删除缓存, db中目前是最新值,但是和1查询的结果是不一致的。线程1用查询到的db的值来缓存到数据库,由于线程2删除缓

2021-03-11 16:05:31 1661 1

原创 如何避免扫描数据库且保证低延迟触发定时任务的一些思考

10. 定时用户自定义触发时间用户自定义触发时间,存在不固定,所以需要秒级的扫描来触发任务。但是如果直接扫表的话,会给数据库造成比较大的压力。可以考虑基于Redis的ZSet来处理明确年月日时分秒, 即希望在一个具体的时间执行,这种执行基本就是一次性。解决方案:把时间转换为时间戳, 然后使用zset的数据格式,key根据业务决定,将同一类的定时统一划分到一个keyvalue按需决定是否需要放入定时任务所需要的数据, score即为用户设置的定时任务触发时间的时间戳。定时任务扫描, 调用r

2021-03-10 16:08:11 520

原创 如何在SpringBoot中自定义redis的lua脚本实现

前言在使用redis的过程中,可能会需要自定义一些lua脚本来完成自己业务方面的实现,用来保证操作上的原子性。那么在SpringBoot中如何去实现这样一套逻辑呢?前置准备依赖不说版本的操作都是刷流氓<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <v

2021-03-04 10:27:09 800 2

原创 基于Spring IOC实现动态简易版的SPI

基于Java自实现的SPI机制的缺陷,以及使用的复杂性,在实际项目中可以通过Spring IOC来简易的实现一版。核心做法是:利用ApplicationContext的getBeansOfType()方法来获取目标接口的全部实现类需要调用接口的地方, 对外预留属性对应值为接口实现的实际bean_name, 然后根据上面的结果是一个Map, key为接口实现的bean_name, value为接口实现类, 然后通过预留属性获取用户想要使用的具体实现类,属性可以预留默认值,即为系统默认;用户可再进行实现

2020-12-17 13:30:03 317

原创 JMeter的极速入门使用.md

快速入门测试计划测试计划可以理解为一个插槽, 只有先创建了一个插槽,后续可以在这个测试计划上添加一些类似插件的功能槽, 然后组合在一起形成一个个的详细测试新建测试计划入口测试计划内容, 在这里可以提前预定义一些自定义变量,当然嫌弃麻烦,也可以不用, 这只是个可选项, 想要后面用到的时候直接通过变量引用, 当然也可以在后面用到的时候直接输入原始值配置元件配置元件有点类似于提前设置用于http请求发送前的一些基础功能,如默认请求、请求头、授权处理等在测试计划上右击,可以找到添加测试元件的入

2020-12-16 20:22:18 135

原创 搭建自己的服务器环境之安装项目文档工具YApi

1. 接口管理工具-YApi官方仓库地址先来几个实例图吧1.1 安装1.1 安装依赖NodeJs# 创建安装目录mdkir -p /opt/nodejscd /opt/nodejs# 下载wget https://nodejs.org/download/release/v12.19.0/node-v12.19.0-linux-x64.tar.gz# 解压tar zxvf node-v12.19.0-linux-x64.tar.gz# 编辑环境变量vim /etc/profile#

2020-12-01 18:10:33 308

原创 搭建自己的服务器环境之Jenkins的安装和使用

文章目录5. 自动化部署-Jenkins5.1 下载安装war包下载运行5.2 插件安装5.2 配置5.2.1 全局工具配置5.2.3 个人信息配置5.4 经典版构建任务GeneralSource Code ManagementBuild TriggersBuild EnvironmentBuildPost StepsPUSHLISH OVER SSH(可选)保存以上配置构建入口远程构建5. 自动化部署-Jenkins官方文档5.1 下载安装war包下载运行# 创建jenkins目录和工作目录m

2020-12-01 17:20:41 774

原创 搭建自己的服务器环境之基本工具安装

突然发现有的内容很简单, 那就把这些基础的工具放到一个里面来安装好了1. 安装Git先用yum安装吧,看能不能满足使用,可以的话就不麻烦了yum -y install git.x86_64# 查看版本git --version# 查看安装目录which git2. 安装依赖NodeJs# 创建安装目录mdkir -p /opt/nodejscd /opt/nodejs# 下载wget https://nodejs.org/download/release/v12.19.0/nod

2020-12-01 17:00:50 475

原创 搭建自己的服务器环境之安装Redis

4. 安装redis后续内容需要使用到docker以及docker-compose, 需要先行安装,如果还未安装,可以搜索其它文章或者查看该安装系列docker安装4.1 单机# 创建redis的本地挂载目录mkdir -p /opt/redis/conf & mkdir -p /opt/redis/datavim /opt/redis/conf/redis.conf简单版的配置文件内容如下## 配置文件最基本的修改## 只允许本机访问## bind 127.0.0.1## 修

2020-12-01 16:46:56 337

原创 搭建自己的服务器环境之安装zookeeper

3. 安装zookeeper3.1 使用dockerhttps://hub.docker.com/_/zookeeper后续内容需要使用到docker以及docker-compose, 需要先行安装,如果还未安装,可以搜索其它文章或者查看该安装系列docker安装创建临时镜像,拷贝配置文件,以备后用# 先拉取镜像docker pull zookeeper:3.6.2# 创建本地挂载目录mkdir -p /opt/zookeeper/conf & mkdir -p /opt/z

2020-12-01 16:23:34 289

原创 搭建自己的服务器环境之安装RocketMQ和RocketMQ Console

文章目录2. 安装rocketmq1. RocketMQ1.1 下载1.2 配置文件1.3 单机1.4 集群2. RocketMQ Console2. 安装rocketmq参考最佳实践1. RocketMQ1.1 下载mkdir /opt/rocketmqcd /opt/rocketmq# 下载wget https://downloads.apache.org/rocketmq/4.7.1/rocketmq-all-4.7.1-source-release.zip# 解压unzip

2020-12-01 16:13:49 724

原创 搭建自己的服务器环境之安装mongo和mongo-express

文章目录前提准备配置文件单机docker-compose访问mongo-express创建用户授权前提准备由于采用的docker安装, 需要安装docker以及docker-compose, 可以查看其他文章,也可点击查看该系列docker安装章节内容配置文件点击查看mongo配置文件模块官方文档关于下列配置文件,全部来源于上述连接中个人查看后自行编写的内容,因此仅供参考systemLog: destination: file path: "/var/log/mongodb/mong

2020-12-01 15:24:45 1133

原创 搭建自己的服务器环境之一免密登陆

服务器到手之后,要频繁的进行远程连接,每次输入密码实在是太烦了。身份概念设定, A服务器要免密登陆到B服务器, A服务器现在被称为请求服务器, B被称为目标服务器。先在请求服务器生成RSA秘钥对, 如果存在的话可以直接拷贝使用也可。作为秘钥对,私钥和秘钥存放文件的区别是公钥是以.pub结尾的# 如果本地存在,就不要用这个命令了,因为默认生成的文件是~/.ssh/id_rsa和~/.ssh/id_rsa和.pub,作为开发本地肯定都会存在这个文件的# 生成rsa秘钥对, -C 指定rsa对象的账号信息

2020-12-01 14:57:16 354

原创 搭建自己的服务器环境之nginx安装以及配置https访问

docker 安装关于docker的安装,可以参考其他文章或者同系列搭建自己的服务器环境之四安装Docker# 先创建要挂载的目录mkdir -p /opt/nginx/conf && mkdir -p /opt/nginx/conf.d && mkdir -p /opt/nginx/html && mkdir -p /opt/nginx/log# 获取镜像docker pull nginx:stable-perl # 先启动容器,让其在后台运

2020-12-01 14:27:59 618

原创 搭建自己的服务器环境之安装maven以及nexus私服

1. 安装maven# 创建存放目录mkdir -p /opt/maven & cd /opt/maven# 下载wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz# 解压tar zxvf apache-maven-3.6.3-bin.tar.gz# 配置环境变量vim /etc/profile# 将以下环境变量放入到最后一行的后面expo

2020-11-30 22:49:34 390

原创 搭建自己的服务器环境之四安装Docker

同样参考阿里云ECS部署开发教程1. 安装# 安装Docker的依赖库。yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker CE的软件源信息。yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装Docker CE。yum makecache fastyum

2020-11-30 14:45:22 405

原创 搭建自己的服务器环境之三安装mysql

yum源安装这个直接参考ECS首页有安装步骤,只是可能会调整一些用户权限方面的设置# 安装源, 目前版本是5.7wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum -y install mysql57-community-release-el7-10.noarch.rpmyum -y install mysql-community-server # 启动mysqlservice mysqld

2020-11-30 11:30:11 123

原创 搭建自己的服务器环境之二安装Java

这个好像没啥好说的, 教程什么的一大堆, 但因为是整个环境搭建系列,所以还是得一个个的来一遍登陆oracle, 找到自己要下载的jdk的版本,不得不吐槽oracle的密码规则, 自己的密码永远都记不住,永远为了满足规则, 输入一堆乱七八糟的东西,然后下次就忘记,再重置再使用。我这里安装的版本是jdk-8u271下载地址: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html。根据自己的情况选择下载包,由于

2020-11-30 11:10:46 395 1

空空如也

空空如也

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

TA关注的人

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