![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 84
6曦轩
一个家事复杂的程序员
一个没有感情的广东人
展开
-
Redis后传-优化神技
好久没分享博文了,换了个公司确实比较忙,但是接下来还是会持续输出自己的一些内容,希望各位多多支持,这样我才更加有动力继续下去~最近一直在做优化的东西,也查了很多相关方面的资料,那今天就跟大家分享一些关于redis的优化神技,当你工作中遇到如下问题,那就使出今天学到的绝招,一招定乾坤!原创 2022-10-07 23:32:56 · 267 阅读 · 1 评论 -
Centos 定时重启 tomcat 服务的方法
场景某一天客户突然跟我说单机服务请求失败,我一看情况,是 tomcat 挂了,但是日志却没有任何报错信息,用 top 命令查看也没发现啥问题,直接重启之后并没有啥问题,于是我就猜想会不会是运行太长时间,有一些程序内部出了异常,但是没有抛出来,短时间定位不到问题,于是我就想着,先把 tomcat 做个定时重启,确保每天服务都正常运行。正文重启tomcat的shell脚本#!/bin/bash. /etc/profiletomcatPath="这里放tomcat的路径"binPath="$tom原创 2021-08-07 15:40:56 · 1056 阅读 · 0 评论 -
【合】Redis 实战篇——高并发下的 Redis
高并发问题在Redis 存储的所有数据中,有一部分是被频繁访问的。有两种情况可能会导致热点问题的产生,一个是用户集中访问的数据,比如抢购的商品,明星结婚和明星出轨的微博。还有一种就是在数据进行分片的情况下,负载不均衡,超过了单个服务器的承受能力。热点问题可能引起缓存服务的不可用,最终造成压力堆积到数据库。出于存储和流量优化的角度,我们必须要找到这些热点数据。热点数据发现除了自动的缓存淘汰机制之外,怎么找出那些访问频率高的 key 呢?或者说,我们可以在哪里记录 key 被访问的情况呢?客户端第一原创 2021-02-28 16:07:25 · 341 阅读 · 0 评论 -
【合】Redis 实战篇——数据一致性问题处理方案
1 Redis 客户端1.1 客户端通信原理客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。客户端和服务器发送的命令或数据一律以 \r\n (CRLF 回车+换行)结尾。如果使用 wireshark 对 jedis 抓包:环境:Jedis 连接到虚拟机 202,运行 main,对 VMnet8 抓包。过滤条件:ip.dst==192.168.8.202 and tcp.port in {6379} set qingshan 抓包:可以看到实际发出的数据包是:原创 2021-02-28 14:51:30 · 563 阅读 · 0 评论 -
【合】Redis 实战篇——Redis 客户端(Jedis,Luttece,Redisson)
Redis 客户端客户端通信原理客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。客户端和服务器发送的命令或数据一律以 \r\n (CRLF 回车+换行)结尾。如果使用 wireshark 对 jedis 抓包:环境:Jedis 连接到虚拟机 202,运行 main,对 VMnet8 抓包。过滤条件:ip.dst==192.168.8.202 and tcp.port in {6379} set qingshan 抓包:可以看到实际发出的数据包是:*3\r\原创 2021-02-27 16:45:36 · 1020 阅读 · 0 评论 -
【转】Redis 分布式——可用性保证之 Sentinel(原理篇)
可用性保证之 SentinelSentinel 原理如何实现主从的自动切换?我们的思路:创建一台监控服务器来监控所有 Redis 服务节点的状态,比如,master 节点超过一定时间没有给监控服务器发送心跳报文,就把 master 标记为下线,然后把某一个 slave 变成 master。应用每一次都是从这个监控服务器拿到 master 的地址。问题是:如果监控服务器本身出问题了怎么办?那我们就拿不到 master 的地址了,应用也没有办法访问。那我们再创建一个监控服务器,来监控监控服务器…原创 2021-01-16 15:42:14 · 165 阅读 · 0 评论 -
【转】Redis 分布式——Redis 主从复制
为什么需要 Redis 集群为什么需要集群?性能Redis 本身的 QPS 已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响。这个时候我们希望有更多的 Redis 服务来完成工作。扩展第二个是出于存储的考虑。因为 Redis 所有的数据都放在内存中,如果数据量大,很容易受到硬件的限制。升级硬件收效和成本比太低,所以我们需要有一种横向扩展的方法。可用性第三个是可用性和安全的问题。如果只有一个 Redis 服务,一旦服务宕机,那么所有的客户端都无法访问,会对业务造成很大的影响。另原创 2020-12-27 13:49:06 · 216 阅读 · 0 评论 -
【承】Redis 原理篇——Redis 高性能深入剖析
Redis 为什么这么快?Redis 到底有多快?https://redis.io/topics/benchmarkscd /usr/local/soft/redis-5.0.5/srcredis-benchmark -t set,lpush -n 100000 -q结果(本地虚拟机):SET: 51813.47 requests per second —— 每秒钟处理 5 万多次 set 请求LPUSH: 51706.31 requests per second —— 每秒钟处理 5 万原创 2020-11-01 14:31:21 · 660 阅读 · 0 评论 -
【承】Redis 原理篇——Redis 的内存回收机制
内存回收Reids 所有的数据都是存储在内存中的,在某些情况下需要对占用的内存空间进行回收。内存回收主要分为两类,一类是 key 过期,一类是内存使用达到上限(max_memory)触发内存淘汰。过期策略要实现 key 过期,我们有几种思路。定时过期(主动淘汰)每个设置过期时间的 key 都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的 CPU 资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。惰性过期(被动淘汰)只有当访问一个 k原创 2020-08-29 11:32:59 · 289 阅读 · 0 评论 -
【承】Redis 原理篇——关于 Redis 中的事务
Redis 事务先看官网https://redis.io/topics/transactions/http://redisdoc.com/topic/transaction.html为什么要用事务我们知道 Redis 的单个命令是原子性的(比如 get set mget mset),如果涉及到多个命令的时候,需要把多个命令作为一个不可分割的处理序列,就需要用到事务。例如我们之前说的用 setnx实现分布式锁,我们先 set,然后设置对 key 设置 expire,防止 del 发生异常的时候锁不原创 2020-08-24 21:32:10 · 259 阅读 · 0 评论 -
【承】Redis 原理篇——Redis 发布/订阅模式
前言关于 Redis 的“起承转合”,我前面已经用五个篇章的长度作了一个 Redis 基础篇——“起”篇的详细阐述,相信大家无论之前有没有接触过 Redis,都能从中学到不少东西。基础篇的内容顾名思义,只是个基础,主要说了 Redis 的发展以及 Redis 的基本数据类型,内容跟平时使用关联会比较大,难度不算大,希望大家能好好消化。这里送上基础篇的飞机票:【起】Redis 概述篇——带你走过 Redis 的前世今生【起】Redis 基础篇——基本数据结构之String,Hash【起】Redis原创 2020-08-19 16:23:12 · 371 阅读 · 0 评论 -
【起】Redis 基础篇——基本数据结构之总结篇
前言距离过年那会闲在家更新的 MySQL 系列已经过去一段时间了,这段时间一直在忙其他的,所以博客的更新也就搁置了,但是一直在想着要更新啥内容比较好,刚好朋友给了我一本 Redis 的书籍,我就打算看完结合官方的文档总结一下,分享给大家,如果有什么不对的地方请指正。Redis 系列,我想以“起承转合”的形式来更新,不过不一定是四篇噢,因为篇幅有限,太长怕你们没有耐心看完,可能《起》篇就分为几篇博文来叙述了,我也会对其进行规整,方便大家看完能更好的吸收,毕竟写文章的我能得到各位观看我的文章,是我的荣幸,我原创 2020-08-07 09:26:18 · 288 阅读 · 0 评论 -
【起】Redis 基础篇——基本数据结构之 ZSet,Bitmap…
ZSet 有序集合存储类型sorted set,有序的 set,每个元素有个 score。 score 相同时,按照 key 的 ASCII 码排序。数据结构对比:数据结构是否允许重复元素是否有序有序实现方式列表 list是是索引下标集合 set否否无有序集合 zset否是分值 score操作命令添加元素zadd myzset 10 java 20 php 30 ruby 40 cpp 50 python获取全部元素zrange m原创 2020-08-04 09:29:12 · 554 阅读 · 0 评论 -
【起】Redis 基础篇——基本数据结构之 List,Set
List 列表存储类型存储有序的字符串(从左到右),元素可以重复。可以充当队列和栈的角色。操作命令元素增减:lpush queue alpush queue b crpush queue d elpop queuerpop queueblpop queuebrpop queue取值lindex queue 0lrange queue 0 -1存储(实现)原理在早期的版本中,数据量较小时用 ziplist 存储,达到临界值时转换为 linkedlist 进行存储,分别对原创 2020-07-31 10:08:14 · 438 阅读 · 0 评论 -
【起】Redis 基础篇——基本数据结构之String,Hash
前言距离过年那会闲在家更新的 MySQL 系列已经过去一段时间了,这段时间一直在忙其他的,所以博客的更新也就搁置了,但是一直在想着要更新啥内容比较好,刚好朋友给了我一本 Redis 的书籍,我就打算看完结合官方的文档总结一下,分享给大家,如果有什么不对的地方请指正。Redis 系列,我想以“起承转合”的形式来更新,不过不一定是四篇噢,因为篇幅有限,太长怕你们没有耐心看完,可能《起》篇就分为几篇博文来叙述了,我也会对其进行规整,方便大家看完能更好的吸收,毕竟写文章的我能得到各位观看我的文章,是我的荣幸,我原创 2020-07-27 15:03:30 · 477 阅读 · 0 评论 -
Failed to initialize component [org.apache.catalina.webresources.WarResourceSet@1552a862]解决
异常小项目直接打包成 war 包丢到 tomcat 运行,在发布的时候发生错误:Failed to initialize component [org.apache.catalina.webresources.WarResourceSet@1552a862]分析项目是用 maven 管理的,有代码改动,想部署多一个供另外一个项目访问,pom 文件中的 groupId 和 artifactId 没有改动,导致冲突。解决groupId 和 artifactId 组成 war 包的唯一识别标志,只要原创 2020-05-22 10:11:40 · 2127 阅读 · 0 评论 -
"The valid characters are defined in RFC 7230 and RFC 3986"解决
问题java.lang.IllegalArgumentException: Invalid character found in the requesttarget. The valid characters are defined in RFC 7230 and RFC 3986org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)org.apache.coyote.http1原创 2020-05-09 15:48:32 · 462 阅读 · 0 评论 -
微信公众号获取管理素材列表的大坑-{errcode":40004,"errmsg":"invalid media type hint:"}
问题最近在做微信公众号的开发(前端后台都有),所以更新系列博文就得推迟了,不过遇到的一些问题还是可以跟大家分享一下,以免大家以后需要用到的时候跟我一样踩坑。像今天,我在微信公众号的后台-接口权限中看我的权限(个人号),看到个人号有个永久素材管理接口的权限,就想着拿这个接口来做点什么。那我拿到这个接口的第一件事,我肯定是先尝试获取素材列表啦~微信开放文档的使用说明如下:于是我马上上手调...原创 2020-04-29 14:48:39 · 4304 阅读 · 3 评论 -
保证分布式系统中 ID 的唯一性的 N 种方式
前言前面我在公众号提了一个问题,如何保证分布式系统中 ID 的唯一性,今天我就来给大家解答一下,如果有什么补充或者疑问的可以到我的公众号「6曦轩」留言,看到的话会尽快回复。系统唯一 ID 是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成 ID 的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个 ID 生成的策略。下面就介绍一些常见的 ID 生...原创 2020-04-03 17:45:49 · 2339 阅读 · 1 评论 -
【概述篇】分布式架构的演进过程
前言正文架构的本质一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐渐碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序。架构的本质就是对系统进行有序化重构,使系统不断进化。那架构是如何实现无序到有序的呢?基本的手段就是分和合,先把系统打散,然后重新组合。分的过程是把系统拆分为各个子系统 / 模块 / 组件,拆的时候,首先...原创 2020-03-24 15:28:50 · 391 阅读 · 0 评论 -
MySQL相关(终结篇二)- SQL 语句分析与优化
前言正文优化器——SQL 语句分析与优化优化器就是对我们的 SQL 语句进行分析,生成执行计划。我们做项目的时候,有时会收到 DBA 的邮件,里面列出了我们项目上几个耗时比较长的查询语句,让我们去优化,这些语句是从哪里来的呢?我们的服务层每天执行了这么多 SQL 语句,它怎么知道哪些 SQL 语句比较慢呢?首先,我们要把 SQL 执行情况记录下来。慢查询日志 slow query lo...原创 2020-03-01 21:47:28 · 947 阅读 · 0 评论 -
MySQL相关(终结篇一)- 性能优化(配置及架构)
“你对 MySQL 的性能优化有什么想法?”很多出去面试的朋友应该基本上都会被问到这个问题,但是可能能够回答得尽善尽美的比较少,看过我专题且能够消化成自己肚子里的东西的朋友应该可以吊打面试官了哈哈哈哈(针对中高级),希望今天这篇文章之后大家能够对自己脑海中零散知识点进行整合整理,我盼着你们能回来给我报喜(当然吐苦水也可以),也盼着能跟大家一起不断进步。回到正题,关于这次的 MySQL 性能优化的知识点,我会分成两篇幅的文章来输出,关于 SQL 语句的性能优化我会以单独的篇幅来进行编写,语句优化在实操中原创 2020-03-01 21:46:31 · 537 阅读 · 1 评论 -
MySQL相关(九)- 死锁的发生和避免
在我们使用锁的时候,有一个问题是需要注意和避免的,我们知道,排它锁有互斥的特性。一个事务或者说一个线程持有锁的时候,会阻止其他的线程获取锁,这个时候会造成**阻塞等待,如果循环等待**,会有可能造成**死锁**。原创 2020-02-26 14:10:17 · 471 阅读 · 0 评论 -
MySQL相关(八)- innodb行级锁深入剖析
当一个事务锁住了一行数据的时候,其他的事务不能操作这一行数据,那它到底是锁住了这一行数据,还是锁住了这一个字段,还是锁住了别的什么东西呢?原创 2020-02-25 14:35:32 · 437 阅读 · 0 评论 -
MySQL相关(七)- innodb 锁的介绍及使用
MySQL InnoDB 锁的基本类型https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html官网把锁分成了 8 类。所以我们把前面的两个行级别的锁(Shared and Exclusive Locks),和两个表级别的锁(Intention Locks)称为锁的基本模式。后面三个 Record Locks、Gap Locks、N...原创 2020-02-24 16:24:33 · 455 阅读 · 0 评论 -
Error:java: Compilation failed: internal java compiler error 解决方法
报错现象新导入项目,在编译的时候报了Error:java: Compilation failed: internal java compiler error 的错误信息:问题分析从里面的信息可以看出,应该是 jdk 版本的问题,那么 jdk 版本导致的原因可能有这两个,一个是编译版本不匹配,一个是当前项目jdk版本不支持。解决方案在 IDEA 中关于 jdk 的设置有三个,我们来一个个...原创 2020-02-20 15:21:21 · 972 阅读 · 0 评论 -
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
上一篇文章我们介绍了MySQL 的四大事务特性 ACID,以及innodb 的事务隔离级别RU,RC,RR,可串行化,在结尾的时候我还卖了个关子,让大家思考一下 innodb 的事务隔离级别在 MySQL 中是如何实现的,不知道大家思考得咋样了,anyway,我们今天就在这里继续讲关于事务隔离级别的实现方案。原创 2020-02-17 15:54:49 · 679 阅读 · 0 评论 -
MySQL相关(五)- 事务特性及隔离级别的详细介绍
什么是数据库的事务?事务的典型场景在项目里面,什么地方会开启事务,或者配置了事务?无论是在方法上加注解,还是配置切面。<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes><tx:method name="save*" rollback-for="T...原创 2020-02-16 16:36:35 · 511 阅读 · 0 评论 -
MySQL相关(四)- 性能优化关键点(索引)
前言前面已经写了有两篇章长度的文章,第三篇我一直在寻思着要写什么(其实并没有),按照脑图来的话,这篇文章我们该来讲讲关于索引的知识了,这可是 MySQL 性能优化很关键的知识点,千万千万不要错过,不过我这里会相对比较深入地探究,相信大家读完之后多少会有点收获。先送上两张飞机票????还没读过前面文章的伙伴可以先前往阅读,由浅入深:MySQL相关(一)- 一条查询语句是如何执行的MySQL相关(二...原创 2020-02-04 17:14:42 · 641 阅读 · 0 评论 -
MySQL相关(三)- 索引数据模型推演及 B+Tree 的详细介绍
前言前面已经写了有两篇章长度的文章,第三篇我一直在寻思着要写什么(其实并没有),按照脑图来的话,这篇文章我们该来讲讲关于索引的知识了,这可是 MySQL 性能优化很关键的知识点,千万千万不要错过,不过我这里会相对比较深入地探究,相信大家读完之后多少会有点收获。先送上两张飞机票????还没读过前面文章的伙伴可以先前往阅读,由浅入深:MySQL相关(一)- 一条查询语句是如何执行的MySQL相关(二...原创 2020-02-04 17:11:46 · 1095 阅读 · 0 评论 -
MySQL相关(番外篇)- innodb 逻辑存储结构
前言前面已经写了有两篇章长度的文章,第三篇我一直在寻思着要写什么(其实并没有),按照脑图来的话,这篇文章我们该来讲讲关于索引的知识了,这可是 MySQL 性能优化很关键的知识点,千万千万不要错过,不过我这里会相对比较深入地探究,相信大家读完之后多少会有点收获。先送上两张飞机票????还没读过前面文章的伙伴可以先前往阅读,由浅入深:MySQL相关(一)- 一条查询语句是如何执行的MySQL相关(二...原创 2020-02-04 17:10:09 · 883 阅读 · 0 评论 -
一个由“ YYYY-MM-dd ”引发的惨案
前言在元旦那几天,刚好出游了,然而我在使用一些 App 的时候,发现了一个应该是由前端粗心导致的 bug,在 2019.12.30 出发,结果 App 上显示的是 2020.12.30(此处是不是该把程序员拉去祭天了)。鉴于可能会有程序员因此而被拉去祭天,而我以前学 Java 的时候就有留意过这个问题,所以我还是把这个问题拿出来说一下,希望能尽量避免这方面的粗心大意(毕竟这种问题也很难测出来)...原创 2020-01-14 14:52:54 · 493 阅读 · 0 评论 -
性能优化利器-位运算的整理总结
前言关于位运算,相信大家都不陌生,特别是写过一些对性能要求很严苛项目的同学,毕竟,这是一把提升程序性能效率的神兵利器。我们都知道,程序中所有的数在计算机内存中都是以二进制的形式储存的,而位运算就是直接对整数在内存中的二进制位进行操作。比如,位与,位或,异或等。本文着重于位运算的技巧总结,难度不会太大,掌握了还可以提高自己代码的逼格,但重点是要有耐心,理解位运算的作用。正文判断奇偶数先看...原创 2020-01-08 15:30:42 · 291 阅读 · 0 评论 -
【算法】如何找出只出现一次的数字
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4思路首先,从题目中获取到几个关键点:非空、整数、数组只有一个元素出现一次,其余都出现两次要求算法具...原创 2019-12-11 14:59:22 · 1144 阅读 · 0 评论 -
高性能的“NIO”框架——netty
前言细心的读者可能观察到,我在标题中关于"NIO"的词汇,加了双引号,在小学的时候啊,语文老师经常跟我们说,这里加双引号是什么什么作用,那我这边加双引号是要表示什么意思呢?哈哈哈,原谅我卖关子了,马上为大家带来我的看法,在netty中,很多资料其实都是说这是一个高性能的 NIO 框架(事实上也没错),我看了 netty 的源码,发现里面还包含了关于 OIO 的封装,但是 OIO 在新版本中的方法...原创 2019-11-05 16:13:19 · 392 阅读 · 0 评论 -
Java中的阻塞队列——BlockingQueue
前言在上一篇博文中,我们了解了Java中的线程池,细心的同学会观察到,在线程池的参数中有一个阻塞队列,那么这个阻塞队列在Java中是怎样一个东西呢,它的原理又是怎样的呢?我们今天通过这篇博文来简单了解一下。Java阻塞队列原理阻塞队列,关键字是阻塞,先理解阻塞的含义,在阻塞队列中,线程阻塞有这样的两种情况:当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入...原创 2019-11-01 10:07:07 · 293 阅读 · 0 评论 -
JAVA线程池——ThreadPool
前言线程的使用在 Java 开发中已经屡见不鲜了,在并发编程,分布式的场景中更是常客,但是对于线程的使用可能一些职场新人还是会有些不熟悉,今天这篇我们就先来介绍一下关于 Java 的 Thread 使用。ThreadThread的使用关于Thread的那些事线程池ThreadPool线程池参数Java自带线程池SignalThreadPool...原创 2019-10-31 11:04:04 · 290 阅读 · 0 评论 -
HashMap的一些问题探讨
由问题引入hashCode的作用查看HashMap源码,看到hashCode在这个地方有使用到,在做hash运算的时候使用key的hashCode跟hashCode逻辑右移16位的值做异或运算,所以说hashCode可以说是在给hash运算做前戏操作。 static final int hash(Object key) { int h; return (key...原创 2019-10-30 16:07:54 · 135 阅读 · 0 评论 -
obj对象为空防崩溃的解决方法
场景int result = Integer.valueOf(obj.toString());上面这行代码,在obj对象为空的情况下,会直接崩溃;而这里的obj,一般情况下是从json数据中取出来的,而且对于这种API接口,我们无法保证其永远不为空。解决所以这里我们编写一个类型安全转换函数convertToInt,设置默认值,如果转换失败,返回默认值:public final stat...原创 2019-03-02 12:02:13 · 470 阅读 · 0 评论 -
删除数组中的某个元素-JAVA
问题在Java开发中,可能会碰到需要删除数组中某个元素的场景。解决方案Java api中,数组虽然是一个对象,但是其并没有提供add()或者remove()等操作元素的方法,要删除元素的话,可以通过将数组对象转换成List再进行remove(),这个方法今天不在这里展开,这里介绍的是另外一种方法,直接通过Java的操作对数组元素进行移除。流程如下: 要删除一个数组中index位置的元素,使...原创 2019-03-07 17:00:39 · 30602 阅读 · 3 评论