自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

listenFen的博客

记录成长的每一步

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

原创 Redis分布式锁学习

推荐使用redisson,其中已经提供了完整的分布式锁的实现,并且是基于redis单机,主从架构,哨兵模式,redis 集群等不同的架构。

2024-04-26 15:11:48 339 1

原创 Redis学习-Redis的九种数据结构

虽然redis是用C语言编写,但是redis中的string是redis自己实现的字符串结构,叫Simple Dynamic String简称(SDS),因为redis做为中间件会接受不同语言编写的程序传过来的字符串,它们都可能和C语言中的字符串结构不一样,例如C语言中以’\0’表是字符串的结尾,当传过来的二进制数据转换成C语言中的字符串中间有’\0’那么C语言就会认为这个字符串已经结束了,则后面的数据就丢失了。

2024-04-21 15:39:21 1002

原创 MySQL学习-非事务相关的六大日志、InnoDB的三大特性以及主从复制架构

3.错误日志:记录了数据库启动和停止,以及运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。在MySQL数据库中,错误日志功能是默认开启的,而且无法被关闭。4.二进制日志:即binlog日志,记录了所有执行过的修改操作语句,不保存查询语句。可用于数据库灾备和主从复制。打开或关闭binlog文件需要在mysql配置文件中修改(Mysql5.7默认关闭,Mysql8.0默认开启),然后重启数据库binlog日志格式binlog写入磁盘的机制。

2024-04-17 15:40:50 863

原创 MYSQL事务学习-锁机制

在多个线程并发访问某个数据尤其是敏感的数据的时候,我们需要保证这个数据在任何时候都是最多只有一个线程在访问,从而保证数据的完整性和一致性。而锁就是计算机协调多个进程或线程并发访问某一资源的机制。锁机制为实现MySQL的各个隔离级别提供了保证,而锁冲突也是影响数据库并发访问性能的一个重要因素。

2024-03-03 16:31:40 876

原创 MYSQL事务学习-日志篇

InnoDB采用了WAL技术(Write-Ahead Logging),这种技术的思想就是先写日志,再写磁盘,只有日志写入成功,才算事务提交成功,当出现服务器宕机一些数据未刷新到磁盘时,就可以通过写入的日志来恢复,保证事务的持久性。而脏页刷入磁盘并不是每次变更都会触发的,而是master线程隔一段时间处理一次,所以就可能出现在两次刷盘的间隔中,服务器就宕机了,那么写入缓冲池的数据就丢失了,但是事务是具有持久性的,事务提交的数据变更操作即使是服务器宕机也不应该丢失,所以需要redo日志记录事务的变更操作。

2024-02-26 16:23:53 347

原创 MYSQL事务学习-基础篇

一个MYSQL服务器运行时会同时处理多个事务,按正常来讲,根据事务的隔离特性,当一个事务对某一个数据进行访问时,其他的事务应当先排队,但是这样的话效率就会比较低。所以我们希望在保持事务的隔离性的又想尽量提高服务器处理多个事务的性能,只能在二者之间平衡取舍。

2024-02-26 16:22:53 322

原创 MYSQL的sql执行流程学习

客户端创建一个TCP连接请求,mysql服务器校验用户名和密码以及访问ip是否正确,如果正确则在连接池中获取一个连接,链接再从线程池中获取一个线程来执行sql语句sql语句执行时先会查询缓存如果缓存中有对应的sql执行缓存则直接返回结果给客户端,没有的话则进入下一步(MYSQL8.0已取消)对sql进行解析包括词法解析和语法解析,此时还会判断语法是否符合要求,不符合则会返回错误信息给客户端,解析完成后会生成一个新的语法树优化器再对其进行优化,包括物理优化和逻辑优化优化完成后会生成一个执行计划交给

2024-02-19 16:46:14 107

原创 MYSQLB+树索引学习

随着表中存储的数据越来越多,则一个数据页都无法记录所有的叶子节点,那么再进行一次升级,根节点再复制数据到一个新的数据页,并将新增的记录放到一个新的数据页,自己则记录这个新节点的每个页面的最小的索引列和页码,这个过程不会无限次进行的,最多会有四级节点。另外MyISAM表中的二级索引存储的数据和主键索引类似,叶子节点存储的是索引列和地址值。

2024-02-19 16:32:27 277

原创 MYSQLB+树中的索引中数据页结构学习

在MYSQL中的B-TREE索引的节点都是一个一个的数据页,数据页也是磁盘和内存交互的基本单位,数据库在读取数据时无论是读取一行还是多行其实都是将这些行所在的数据页加载到内存中(如果一次读取只获取一行数据,那么读取多条数据则需要多次IO,效率过低)。在InnoDB中每个数据页的默认大小为16KB。

2024-02-19 16:18:37 662

原创 索引优化学习笔记

查询sql的优化有两个方面一个是物理查询优化,一个是逻辑查询优化物理查询优化:是通过索引和表连接方式等技术来进行优化逻辑查询优化:是通过 sql等价变换来提升查询效率,即换一种sql写法(列如将子查询转换为表连接的方式)

2024-02-18 15:57:47 489

原创 记一次快递批量入库功能优化(API串行调用->API并行调用)

前端传递一个快递单号的集合,后端校验当前用户是否有权限操作->校验快递单号是否已存在->调用第三方API查询快递数据->将调用结果保存并返回展示问题:功能限制每次最多可以传十个快递单号,后台最初是通过循环调用的方式去查询API,API的响应时间是200ms~2s,也就是说服务商处已经同步有快递数据的情况下可以在两秒左右完成查询,如果没有数据的话则时间会超过十秒,严重影响工作人员使用。

2023-09-26 16:18:51 106

原创 spring boot +微信小程序项目,通过微信公众号实现指定用户消息长期推送

用户登录小程序,后台记录用户的小程序openId和用户唯一的UnionId。然后用户触发公众号事件(关注公众号或者发送指定消息),后台获取到用户公众号的openId,再调用接口通过公众号的openId查询用户的UnionId,再和数据库里的UnionId进行匹配,将用户的公众号openId存入数据库。此后即可通过userId找到公众号openId 实现公众号消息推送。

2023-09-13 16:27:28 1394 3

原创 spring boot 商品秒杀-商品活动组件

管理端启动的时候查询一下所有状态为未关闭的商品秒杀,然后将超时未关闭的直接关闭、未达到开始时间的,已经开始的分别进行不同的补偿处理或者添加相应的定时任务。因为组件加了自动配置所以只要实现相关的接口即可使用(消息接收处理器要单独处理,要在消息队列消费者中使用handleMessage方法处理数据)该组件主要通过netty时间轮来实现活动开始和结束的定时任务在应用重启时的补偿机制。公司的商城项目,需要添加商品秒杀功能,后续也需要扩展添加商品团购之类的功能。活动商品的库存、用户限购等数据的处理。

2023-03-23 14:38:30 166

原创 spring boot项目基于mahout推荐算法实现商品推荐

spring boot 项目基于mahout实现的推荐系统

2022-12-07 17:54:45 3971

原创 记一次spring boot自带的tomcat与websocket冲突

记一次spring boot自带的tomcat与websocket冲突问题解决方式问题项目新集成了websocket,然后在执行单元测试时报错,报错如下Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverEndpointExporter' defined in class path resource [cn/siccs/ruralmall/con

2022-05-17 09:45:18 791

原创 Nginx设置文件压缩传输

目的:项目中使用的json文件实际有3.7Mb,浏览器加载太慢,根据同事提醒设置一下Nginx实现文件压缩传输。配置:在相应的nginx配置文件中加上以下代码(放在location上面) gzip on; gzip_min_length 1k;#最小压缩文件大小 gzip_buffers 4 16k;#压缩缓冲区 gzip_http_version 1.1; gzip_comp_level 6;#文件压缩级别推荐6级 gzip_disable "MSIE [1-6]\.

2021-04-01 14:15:31 937 2

原创 kettle实现大批量数据动态分页抽取--从ES里取数

从ES里取数一、设置每次抽取条数1.获取ES索引数据量获取数据的方法与我之间写过的kettle从ES中抽数的文章中是一样的,只是本次抽数是为了获取索引的总条数,即total字段1. 设置请求头参数2. 获取数据(因为是之间对ES请求,所以返回的数据未被封装,数据结构即为原始的数据结构)3. 根据总条数设置页数代码如下:public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws Ket

2021-03-11 10:01:25 2412 1

原创 Linux文件查看/编辑命令

1.lessless 文件名进入查看状态后:shift+g 跳转至最后一行(查看时在第一行)ctrl+u 向上一行ctrl+d 向下一行q 推出less查看模式vivi 文件名进入查看模式后按方向键控制光标按 i 进入编辑模式 进入编辑模式后 按ESC退出编辑按shift + i 选择退出方式:q 不保存退出!q 不保存强制退出wq 保存后退出!wq 保存后强制退出...

2021-03-10 17:22:22 158

原创 Linux下查找并关闭项目进程

1.如果知道端口号--根据端口号查找进程lsof -i 端口号--杀掉找到的进程,如果进程是root权限的用户启动的,那么普通用户是杀不掉的kill -9 进程号2.不知道端口号--显示全部进程ps -ef --显示特定的进程ps -ef 关键字(如java)--杀掉找到的进程,如果进程是root权限的用户启动的,那么普通用户是杀不掉的kill -9 进程号...

2021-03-10 17:07:02 399

原创 使用IDEA扫描表结构生成实体类

一、创建数据库链接二、添加生成实体类的代码在项目目录的最下面可以找到相应生成文件的存放位置,初始的只有一个,可以根据自己的需要添加。我是根据公司的框架弄了三个脚本,分别用来生成实体类、dao层以及service层。文件位置如图:然后就是在这个位置添加脚本代码如下:1.实体类:import com.intellij.database.model.DasTableimport com.intellij.database.model.ObjectKindimport com.intellij.

2021-03-10 16:09:52 433

原创 JAVA笔记

获取上年年末日期:Date date = new Date();Calendar oldCalendar = Calendar.getInstance();oldCalendar.setTime(date);oldCalendar.add(Calendar.YEAR, -1);//拨回去年oldCalendar.set(Calendar.DAY_OF_YEAR,oldCalendar.getActualMaximum(Calendar.DAY_OF_YEAR));获取月末日期SimpleDa

2021-03-03 09:20:44 65

原创 修改CMD窗口标题

1.找到TOMCAT的bin目录下的"catalina.bat"文件2.搜索 if “%TITLE%” == “” set TITLE=3.修改set TITLE=之后的内容即可

2021-03-03 09:13:45 698

原创 DB2学习笔记

查找相同id数大于1的数据删除Delete from 表格 where id in (select id from people group by id having count(id)>1);变更字段数据类型ALTER TABLE "WGHYX"."APPVERSION" ALTER "VERSION" SET DATA TYPE VARCHAR(25)添加字段ALTER TABLE "DHGL"."IR_DH_TASK_CUSTINFO" ADD COLUMN "IS_SCR

2021-03-02 16:36:43 960

原创 kettle实现大批量数据动态分页抽取--从数据库里取数

从数据库里取数一、设置每次抽取条数添加表输入步骤,通过count函数查出源数据表的数据量添加java代码步骤,将条数转换成页数代码如下:public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { if (first) { first = false; /* TODO: Your code here. (Using info fie

2021-02-26 10:45:13 2093 1

原创 mysql笔记

mysql查出指定时间段中的每天的日期SELECT date_add( date_sub('2018-01-01',interval 1 day), INTERVAL ( cast( help_topic_id AS signed INTEGER ) + 1 ) day ) day FROM mysql.help_topic WHERE help_topic_id < DATEDIFF('2019-01-01',date_sub('2018-01-01',interval 1 day))

2021-02-25 13:35:03 93

原创 kettle使用httpClient获取ES索引数据

编辑请求头参数(json为json格式请求体)设置请求解析返回数据返回数据格式如下:{ "data": [ { "risk_content": "**", "risk_point": "**", "checked_type": "**", "correction_detail": "**", "supervisor_id": "**", .

2021-02-25 13:33:58 1431

原创 linux防火墙开放/关闭端口命令

防火墙放行10239端口firewall-cmd --zone=public --permanent --add-port=10239/tcp 防火墙关闭10239到10241这几个端口firewall-cmd --zone=public --permanent --remove-port=10239-10241/tcp防火墙放行或关闭端口需要刷新一下才能生效firewall-cmd --reload防火墙查看当前所有放行端口firewall-cmd --zone=public --li

2021-02-25 13:31:42 491

原创 ES返回值数量超过10000条解决方式

现象:ES默认返回数据量为10000条, 当分页的from超过10000条的时候,es就会如下报错:Result window is too large, from + size must be less than or equal to:[10000] but was [10500]. See the scroll api for a more efficient way to requestlarge data sets. This limit can be set by changing the[

2021-02-25 13:24:03 918

原创 DB2表注释拉取

应用场景:公司内网建好数据表之后迁移到客户线上时,通常无法附带导出注释,需要另行拉取表字段注释:SELECT *FROM ( SELECT 'comment on column ' || trim(t.TABSCHEMA) || '.' || t.TABNAME || '.' || t.COLNAME || ' is ' || '''' || t.REMARKS || '''' || ' GO' AS COMMENT FROM syscat. COLUMNS t )WHE

2021-02-25 11:54:04 562

原创 EFK(elasticsearch+filebeat+kibana)日志收集系统搭建记录

一、安装包下载(本文附带安装包均为6.7.1版)kibana-windows-64Kibana-linux-tarelasticsearelech-windows-64elasticsearch-linux-tarfilebeat-windows-64filebeat-linux-tar二、安装注:winows版本解压后可以直接使用,运行对应名称的bat文件即可(filebeat 需要使用命令,如下:)filebeat.exe -e -c filebeat.ymlwinow

2021-02-25 11:51:31 153

空空如也

空空如也

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

TA关注的人

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