- 博客(33)
- 资源 (1)
- 收藏
- 关注
原创 MySQL数据库的分库分表方案
MySQL数据库的分库分表方案一、 数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量,吞吐量,崩溃)。1、 IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度,解决办法是–>分库和垂直分表第二种:网络IO瓶颈,请求的数据太多,网络带宽不够,解决办法–>分库2、 CPU
2020-08-31 17:55:53 19717
原创 雪花算法(SnowFlake)Java实现
分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种。算法原理SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:1、1bit,不用,因为二进制中最高位是符号位,1表示负数,0表示正数。生成的id一般都是用整数,所以最高位固定为0。2、41bit-时间戳,用来记录时间戳,毫秒级。41位可以表示个数字,如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至 ,减1是因为可表示的数值范围是从0开始算的,而不是1。也就是
2020-08-31 17:38:16 15215
原创 SprintBoot的session共享(Redis)
1. 启动类加上注解:@EnableRedisHttpSession2. pom文件 <!-- 集成redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> &l
2020-08-31 16:04:25 25645
原创 springBoot各种组件
spring-boot-starter 核心启动器,包括自动配置支持,日志记录和YAML spring-boot-starter-activemq 使用Apache ActiveMQ进行JMS消息传递的入门者spring-boot-starter-amqp 使用Spring AMQP和Rabbit MQ的入门者 spring-boot-starter-aop 使用Spring AOP和A
2020-08-31 15:59:57 26561
原创 小数转化成百分数(不限制保留位数)
直接上代码,拷贝拿去用就ok~.以下代码的特点:1.直接对小数进行*100+%处理2.转化结果完全准确,没有转化的精度问题3.乘100后的小数位数不进行四舍五入,也就是不限制保留小数的位数如:0.006----0.6%0.12345----12.345%0.07----7%js代码:toPercent(point) { //point为将要转化的小数 if(point == 0){ return point+'%' }else{ if (p
2020-08-31 15:55:42 24444
原创 字符串去转移符转成json对象
直接正则//最初的字符串var str = "{\"CollectionCount\":\"1\",\"InitCollection\":{\"DataBaseAsciiSimuDataFilePath\":\"\",\"HasParaList\":\"true\",\"Index\":\"1\",\"LoaclAsciiSimuDataFilePath\":\"\",\"LoaclBinSimuDataFilePath\":\"\",\"ParaList\":{\"Para\":[{\"ArrayL
2020-08-31 15:53:42 21608
原创 对txt、dat、excel文件内容进行排序
应用场景:需要在浏览器打开本地文件进行详情展示并且可以根据某列进行排序,但是文件内容可能有上千三万条数据,html浏览器自带的排序功能比较卡(千条以上数据根据某一列排序大概需要5s左右),所以采用后端对文件进行排序。文件格式:SortFileUtil工具类:public class SortFileUtil { /** * 对文件内容进行排序 * * @param readFile 文件内容List<List<Object>>
2020-08-31 15:17:46 19751
原创 正则表达式删除字符串中 html 标签
String a = "添加到仿真队列中的初始化条件文件:<a style=\"color:#1e9fff\" target=\"_blank\" href=/initialCondition/viewInitialCondition?id=4139>10初始化条件文件3.xml</a>,<a style=\"color:#1e9fff\" target=\"_blank\" href=/initialCondition/viewInitialCondition?id=4140
2020-08-31 15:10:28 20164
原创 SpringBoot 拦截器(Interceptor)的使用
拦截器intercprot 和 过滤器 Filter 其实作用类似在最开始接触java 使用struts2的时候,里面都是filter后来springmvc时就用interceptor没太在意过区别,反正就是起检查作用的,仔细阅读 过滤器(filter)和拦截器(interceptor)的区别 后明白了不少最重要的要记住他们的执行顺序: 先filter 后 interceptor过滤前-拦截前-action执行-拦截后-过滤后在了解上面的信息后,本文讲interceptor的使用自己定义的
2020-08-31 14:17:39 28350
原创 怎么保证redis挂掉之后再重启数据可以进行恢复?
怎么保证redis挂掉之后再重启数据可以进行恢复?redis如果仅仅是将数据缓存在内存里面,如果redis宕机了,再重启,内存里的数据就全部都弄丢了,你必须得用redis的持久化机制,将数据写入内存的同时,异步的慢慢的将数据写入磁盘文件中,进行持久化.如果redis宕机了,重启启动,自动从磁盘上加载之前持久化的一些数据,就可以了,也许会丢失少许数据,但是至少不会将所有的数据弄丢.redis持久化的意义,在于故障恢复.比如你部署了一个redis,作为cache缓存,当然你也可以保存一些数据,假如red
2020-08-27 18:07:49 25526 1
原创 低血糖怎样正确进行调理?
吃早餐平时应每天坚持吃富含蛋白质,维生素以及多种微量元素的食物,如鸡蛋,牛奶,豆类,面包,水果等,不仅可以为身体提供充足的营养,还能够起到增强免疫力和使血糖保持正常状态的作用。随时加餐平时可根据个人喜好随身携带一些小零食,如杏仁,瓜子等坚果,不仅可以在工作之余放松一下身心,还能够帮助身体迅速补充所需要的热量与糖类,有效的避免因为饥饿而导致血糖的下降。多吃甜的所谓的低血糖指的就是体内的血糖含量较低,所以平时最好可以每天食用一块糖果,如水果糖,巧克力等,不仅能够很好的帮助预防低血糖的发作,还可以起到缓
2020-08-27 18:03:59 24764
原创 Java运行Jar包内存配置
java -jar -Xms1024m -Xmx1536m -XX:PermSize=128M -XX:MaxPermSize=256M -Dfile.encoding=utf-8 car.jar说明:1、堆内存:最小1024M,最大1536M。(对象使用的内存)2、永久内存:最小128M,最大256M。(类使用的内存,PermGen)3、以utf-8启动...
2020-08-27 13:44:51 23618
原创 spire.doc.free2.7.3添加页眉页脚
生成的时候很方便,但是这个页脚字体不知道怎么更改,只能加一些空格来防止字体挤在一起import com.spire.doc.*;import com.spire.doc.documents.*;import com.spire.doc.fields.DocPicture;import com.spire.doc.fields.TextRange;public class InsertHeaderAndFooter { public static void main(String[] a
2020-08-20 10:48:31 26103
原创 java压缩文件夹递归实现将多个文件夹压缩在同一个zip包
该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩的文件。package com.chuangqi.tools;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip
2020-08-17 09:13:58 22139
原创 main方法中查询数据库和插入数据库
public static void main(String[] args) { try { Connection con = null; Class.forName("com.mysql.jdbc.Driver").newInstance(); // mysql驱动 con = (Connection) DriverManager.getConnection("jdbc:mysql://192.
2020-08-14 17:37:01 24246
原创 Redis主从架构
1. 高可用性的定义如果你的系统在全年99.99%的时间都是处于可用的状态,那么就可以称之为高可用性(99.9%或者99%也算)2. 主备切换Redis的高可用架构,叫做故障转移,failover,也可以叫做主备切换在master故障时自动检测,并且将某个slave-node自动切换为master-node的过程,叫做主备切换.这个过程,实现了redis的主从架构下的高可用性.一旦master故障,很短的时间内就会切换到另一个master上去, 可能就几分钟redis是不可用的这个过程是sent
2020-08-14 16:45:59 25341
原创 idea常用快捷键
IDEA 平时最常用到的快捷键:作用 快捷键注释代码 生成 //注释 Ctrl + /注释代码块生成/**/注释 Ctrl + Shift + /快速改错 alt + Enter快速生成 get、set 、constructor、toString 方法的 alt + Insert新建一行 Shift + Enter快速格式化代码 Ctrl + alt + L批量修改变量 Ctrl + alt + shift + J移动代码行 Shift + alt + ↑或者↓删除或者剪切 Ctrl +
2020-08-14 15:16:41 23793
原创 redis replication的完整运行流程和原理
1. 复制的完整流程a) slave-node启动,仅仅保存master-node的信息,包括master-node的host和ip,但是复制流程还没开始master-node的host和ip来源于redis.conf中的slaveof配置的b) slave-node内部有个定时任务,每秒检查是否有新的master-node要连接和复制,如果发现,就跟master-node建立socket网络连接c) slave-node发送ping命令给master-noded) 口令认证,如果master设置
2020-08-14 09:28:08 24675
原创 怎么保证redis是高并发以及高可用的?
1. 如果redis要支撑超过10万+的并发,应该怎么做?a) 单机的redis几户不可能QPS超过10万,一般都是单机几万解决:读写分离,对缓存,一般都是用来支撑读高并发的,写的请求是比较少的,大量的请求都是在读一般有多个redis,其中有一个master-redis,专门接受写请求,然后把数据复制到其他的多个slave-redis中,然后所有的读请求都从多个slave-redis中去读这种架构就是主从架构,一主多从,主负责写,并且将数据同步复制到其他的slave节点,从节点负责读,所有的读请求全
2020-08-14 09:27:04 26869
原创 Redis的过期策略
定期删除和惰性删除所谓定期删除,指的是redis默认每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除.注意,这里可不是每隔100ms就遍历所有的设置过期时间的key,那样就是一场性能上的灾难,实际上redis是每隔100ms随机抽取一些key来检查和删除的.但是问题是,定期删除可能会导致很多过期key到了时间并没有被删除掉,那咋整呢?所以就是惰性删除了,这就是说,在获取某个key的时候,redis会检查一下,这个key如果设置了过期时间那么是否过期了,如果过期了此时就会
2020-08-14 09:20:36 26840
原创 redis的数据类型
1.String 最基本的结构,普通的set和get,做简单的keyvalue缓存2.hash这个是类似map的一种结构,这个一般就是可以将结构化的数据.比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段Hash类的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接修改这个对象的某个字段的值3.list有序列表,比如可以通过list存储一些列表型的数据结构,类似粉丝列表,文章评论列表
2020-08-14 09:19:38 27116
原创 为什么单线程的redis比多线程的memcached效率要高得多?(为什么单线程的redis还能支持高并发?)
纯内存操作核心是非阻塞的IO多路复用机制单线程反而避免了多线程频繁上下文切换的问题
2020-08-14 09:19:05 25916
原创 客户端跟redis的一次通信流程
1.在redis启动初始化的时候,redis会将连接应答处理器跟AE_READABLE事件关联起来,接着如果一个客户端跟redis发起连接,此时会产生一个AE_READABLE事件,然后由连接应答处理器来处理客户端建立的连接,创建客户端对应的socket的AE_READABLE事件跟命令请求处理器关联起来2.当客户端向redis发起请求的时候(不管是读请求还是写请求,都一样),首先就会在socket产生一个AE_READABLE事件,然后由对应的命令请求处理器来处理,这个命令请求处理器就会从socket中
2020-08-14 09:18:38 26851 1
原创 redis的线程模型是什么?
1. 文件事件处理器Redis基于reactor模式开发了网络事件处理器,这个处理器叫做文件事件处理器,这个文件事件处理器是单线程的,所以redis才叫做单线程的模型,采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器来处理这个事件...
2020-08-14 09:18:04 23010
原创 redis分布式锁
一、分布式锁实现方式1.数据库单独建表维护,使用的是数据库乐观锁2.redis的分布式锁3.zookeeper的分布式锁,zookeeper机制规定,同一个目录下只能有一个唯一的文件名, 借助zookeeper的临时节点实现二、Redis的分布式锁实现1. 使用jedis的2.7.x及以上版本。2. 获取锁: 命令:SET key value [NX|XX] [EX|PX] seconds NX – 只有键key不存在的时候才会设置key的值 XX – 只有
2020-08-13 18:08:53 25826
原创 idea打完整包
在pom.xml中加入<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configura
2020-08-13 10:41:03 26239
原创 spire.doc.free2.7.3生成目录后修改目录的字体
在看spire.doc.free官网API文档时,没有找到修改目录字体的方法只有生成目录的方法,但是生成的是西文字体,我专门去问了他们官网留下的技术人员的QQ,询问到了修改目录字体的使用代码就是再次加载生成了目录后的文档,遍历section/body中的元素,进行目录字体的修改,然后再生成一个word文档,功能非常好用,非常感谢技术人员的知道,但是不知道为什么他们不在官网API文档放这个方法,我找了一上午都没找见com.spire.doc.Document doc1 = new com.spire.d
2020-08-13 09:22:22 33178
原创 使用poi3.17和spire.doc.free2.7.3生成的word完整代码,包含生成word表格,生成多级标题,生成目录,生成页脚页码
package com.chuangqi.service.impl;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.chuangqi.entity.*;import com.chuangqi.mapper.ExperimentDesignMapper;import com.chuangqi.mapper
2020-08-11 11:49:00 30908
原创 spire.doc.free2.7.3生成word目录
在poi3.13生成word文档的主体后,写入本地文件后,写上spire.doc.free2.7.3的生成目录的代码,通过读取已生成的word,加上目录后,然后再生成新的word,也可以直接覆盖生成//创建文档对象 XWPFDocument document = new XWPFDocument();String fileName = "模板生成.docx"; String path = "C:\\Resources\\"; String uuid =
2020-08-11 11:47:16 30390 2
原创 poi3.13生成表格
表格生成和换页方法//创建试验设计表格 XWPFTable tableBanBen = document.createTable(); //设置表级别单元格边距 tableBanBen.setCellMargins(13, 5, 353, 5); //列宽自动分割 CTTblWidth tableBanBenWidth = tableBanBen.getCTTbl().addNewTblPr().addNewTblW();
2020-08-11 11:42:49 28505
原创 poi3.13生成多级标题
自定义标题的层级关系/** * 增加自定义标题样式。这里用的是stackoverflow的源码 * * @param docxDocument 目标文档 * @param strStyleId 样式名称 * @param headingLevel 样式级别 */ private static void addCustomHeadingStyle(XWPFDocument docxDocument, String strStyleId,
2020-08-11 11:40:26 26773
原创 poi3.13生成word的页脚
生成页脚段落XWPFDocument document = new XWPFDocument();/* * 生成页脚段落 * 给段落设置宽度为占满一行 * */ CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFoote
2020-08-11 11:38:00 26802
原创 多线程频繁上下文切换
什么是上下文切换在单核cpu中,多线程的执行是通过cpu的时间片分配,每个线程会分配到一个时间片,循环执行这些线程,线程时间片消耗完了就会进入等待状态,直到分配到新的时间片,因为时间片的时间非常短,所以cpu不停的切换线程执行,给我们造成了多线程同时运行的错觉。cpu通过时间片循环执行线程任务,当线程的cpu时间片用完后会保存当前任务状态,方便下次获取到cpu时间片的时候能继续执行,当下次分配时间片后执行到该线程时,会重新加载该线程的任务状态,而这个从保存任务状态到重新加载的过程就叫上下文换。上下文切
2020-08-06 13:26:10 31789
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人