工具
文章平均质量分 92
6曦轩
一个家事复杂的程序员
一个没有感情的广东人
展开
-
Redis后传-优化神技
好久没分享博文了,换了个公司确实比较忙,但是接下来还是会持续输出自己的一些内容,希望各位多多支持,这样我才更加有动力继续下去~最近一直在做优化的东西,也查了很多相关方面的资料,那今天就跟大家分享一些关于redis的优化神技,当你工作中遇到如下问题,那就使出今天学到的绝招,一招定乾坤!原创 2022-10-07 23:32:56 · 221 阅读 · 1 评论 -
【合】Redis 实战篇——高并发下的 Redis
高并发问题在Redis 存储的所有数据中,有一部分是被频繁访问的。有两种情况可能会导致热点问题的产生,一个是用户集中访问的数据,比如抢购的商品,明星结婚和明星出轨的微博。还有一种就是在数据进行分片的情况下,负载不均衡,超过了单个服务器的承受能力。热点问题可能引起缓存服务的不可用,最终造成压力堆积到数据库。出于存储和流量优化的角度,我们必须要找到这些热点数据。热点数据发现除了自动的缓存淘汰机制之外,怎么找出那些访问频率高的 key 呢?或者说,我们可以在哪里记录 key 被访问的情况呢?客户端第一原创 2021-02-28 16:07:25 · 319 阅读 · 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 · 537 阅读 · 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 · 986 阅读 · 0 评论 -
【转】Redis 分布式——可用性保证之 Sentinel(实战篇)
Sentinel 实战Sentinel 配置为了保证 Sentinel 的高可用,Sentinel 也需要做集群部署,集群中至少需要三个 Sentinel 实例(推荐奇数个,防止脑裂)。hostname IP 地址 节点角色&端口master 192.168.8.203 Master:6379 / Sentinel : 26379slave1 192.168.8.204 Slave :6379 / Sentinel : 26379Slave2 192.168.8.205 Slave :6原创 2021-02-19 21:15:03 · 371 阅读 · 2 评论 -
VMware+Centos7 静态IP设置方法
有很多小伙伴问我关于VMware+Centos7如何设置静态IP的问题。为了彻底帮助大家解决这个问题,我专门写一篇文章做一个说明查看虚拟网卡信息虚拟机安装好以后,当前的系统会多出来两个虚拟网卡,一般情况下这两个网卡的命名是VMware Virtual Ethernet Adapter for VMnet1VMware Virtual Ethernet Adapter for VMnet8我们可以把虚拟机中的系统的静态IP绑定到VMnet8上,所以第一步,我们要看一下VMnet8的..原创 2021-02-18 23:19:20 · 426 阅读 · 0 评论 -
CentOS 7单机安装Redis Cluster(3主3从)
为了节省机器,我们直接把6个Redis实例安装在同一台机器上(3主3从),只是使用不同的端口号。机器IP 192.168.8.207更新:新版的cluster已经不需要通过ruby脚本创建,删掉了ruby相关依赖的安装cd /usr/local/soft/redis-5.0.5mkdir redis-clustercd redis-clustermkdir 7291 7292 7293 7294 7295 7296复制redis配置文件到7291目录cp /usr/local/原创 2021-01-24 22:29:57 · 178 阅读 · 0 评论 -
【转】Redis 分布式——可用性保证之 Sentinel(原理篇)
可用性保证之 SentinelSentinel 原理如何实现主从的自动切换?我们的思路:创建一台监控服务器来监控所有 Redis 服务节点的状态,比如,master 节点超过一定时间没有给监控服务器发送心跳报文,就把 master 标记为下线,然后把某一个 slave 变成 master。应用每一次都是从这个监控服务器拿到 master 的地址。问题是:如果监控服务器本身出问题了怎么办?那我们就拿不到 master 的地址了,应用也没有办法访问。那我们再创建一个监控服务器,来监控监控服务器…原创 2021-01-16 15:42:14 · 160 阅读 · 0 评论 -
【转】Redis 分布式——Redis 主从复制
为什么需要 Redis 集群为什么需要集群?性能Redis 本身的 QPS 已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响。这个时候我们希望有更多的 Redis 服务来完成工作。扩展第二个是出于存储的考虑。因为 Redis 所有的数据都放在内存中,如果数据量大,很容易受到硬件的限制。升级硬件收效和成本比太低,所以我们需要有一种横向扩展的方法。可用性第三个是可用性和安全的问题。如果只有一个 Redis 服务,一旦服务宕机,那么所有的客户端都无法访问,会对业务造成很大的影响。另原创 2020-12-27 13:49:06 · 207 阅读 · 0 评论 -
【承】Redis 原理篇——Redis 发布/订阅模式
前言关于 Redis 的“起承转合”,我前面已经用五个篇章的长度作了一个 Redis 基础篇——“起”篇的详细阐述,相信大家无论之前有没有接触过 Redis,都能从中学到不少东西。基础篇的内容顾名思义,只是个基础,主要说了 Redis 的发展以及 Redis 的基本数据类型,内容跟平时使用关联会比较大,难度不算大,希望大家能好好消化。这里送上基础篇的飞机票:【起】Redis 概述篇——带你走过 Redis 的前世今生【起】Redis 基础篇——基本数据结构之String,Hash【起】Redis原创 2020-08-19 16:23:12 · 358 阅读 · 0 评论 -
mount:未知的文件系统类型“exfat“ 问题思考与解决
问题描述给公司的闲置电脑装了一个 CentOS7,打算当自己平时练手用的服务器,今天拿了自己的移动硬盘,想把之前的东西拷过去,但是 mount 的时候发现 mount 不上去(我的是 exFat 格式的也就是 fat64,支持 macOS和 Windows 的文件互传)。思考那 Mac 上原本也是不支持 ntfs 的啊(苹果没有明确说支持,也没有在系统中自带提供),但是我们可以通过插件的形式来让其可以支持这种格式(但是曦轩为了方便,还是直接把移动硬盘格式化成 exFat 格式,毕竟很多 NTFS 插原创 2020-07-03 14:09:24 · 14342 阅读 · 5 评论 -
记我的 15 款 MacBook Pro 13.3 寸维修(开不了机)+换屏的经历
remark我的 MacBook Pro 有一天突然开不了机,拿去 Apple Store 检测,这里记录一下。流程大概是:先在苹果官网预约天才吧(选定地点和时间,并且填写自己的信息,描述问题等);按照预约的时间到 Apple Store,到场先测量体温(目前情况特殊),然后入门做登记,工作人员会核实身份并且帮你签到,带你到一个指定位置等待接待的工作人员;等了一会就有工作人员来喊你名字,然后帮你看大概是啥问题,我当时的情况是电脑开不了机,充不进电,组合键无效,工作人员也帮我试了一下,初步猜想可能原创 2020-06-17 17:26:19 · 6610 阅读 · 3 评论 -
CentOS7.2 安装单机 Redis
前言鉴于我在准备 Redis 方面的文章,所以,我先附上一份《CentOS7 安装单机 Redis》的教程,教程比较简单,按照文章所说一步一步执行即可。正文我用的是 CentOS 7.2,其实 Redis 安装在每个系统上大同小异,所以我就以我的系统为例,但是由于可能因为环境差异,遇到一些问题,记住,不要慌,可以找度娘,也可以找我,毕竟教学相长嘛。1. 下载redis下载地址在:redis.io比如把 Redis 安装到 /home/usr/soft/cd /home/usr/soft/wg原创 2020-06-15 15:29:52 · 259 阅读 · 0 评论 -
15 款MacBook Pro扩容之旅
我的 macbook 是 2015 年款的 13 retina 屏的 macbookpro;当时选的容量是128G,也就是俗称的乞丐版;现在那个后悔啊,严重不够用啊。要知道苹果的电脑向来是自研自销的,连个螺丝都要和别人家的不一样,所以升级之路漫漫啊。2016 后的带 bar 的笔记本的硬盘就直接焊死在主板上了,彻底堵死升级之路。我的是 2015 年款的,虽说硬盘可以换,内存也是焊死在主板上的。想升级就只能升级硬盘。以后买macbook要慎重选择版本,想好了再下手,要不就只能整机升级了。也就是说,我手上原创 2020-06-08 14:49:35 · 18977 阅读 · 2 评论 -
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 · 2077 阅读 · 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 · 438 阅读 · 0 评论 -
git提交的时候出现异常“bad object HEAD”解决方案
问题发生在提交文件到 github 上时发现提交不上,查看 git status,报了bad object HEAD的错误,如下$git statusfatal: bad object HEAD解决方案这报错信息显示 head 损坏,可能是我误删了什么文件导致本地与远程分支导致,于是我运行git pull origin fenzhiming,问题解决。这次我没有做过多的试验,有遇到相...原创 2020-05-07 17:43:28 · 11239 阅读 · 2 评论 -
微信公众号获取管理素材列表的大坑-{errcode":40004,"errmsg":"invalid media type hint:"}
问题最近在做微信公众号的开发(前端后台都有),所以更新系列博文就得推迟了,不过遇到的一些问题还是可以跟大家分享一下,以免大家以后需要用到的时候跟我一样踩坑。像今天,我在微信公众号的后台-接口权限中看我的权限(个人号),看到个人号有个永久素材管理接口的权限,就想着拿这个接口来做点什么。那我拿到这个接口的第一件事,我肯定是先尝试获取素材列表啦~微信开放文档的使用说明如下:于是我马上上手调...原创 2020-04-29 14:48:39 · 4189 阅读 · 3 评论 -
保证分布式系统中 ID 的唯一性的 N 种方式
前言前面我在公众号提了一个问题,如何保证分布式系统中 ID 的唯一性,今天我就来给大家解答一下,如果有什么补充或者疑问的可以到我的公众号「6曦轩」留言,看到的话会尽快回复。系统唯一 ID 是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成 ID 的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个 ID 生成的策略。下面就介绍一些常见的 ID 生...原创 2020-04-03 17:45:49 · 2217 阅读 · 1 评论 -
【概述篇】分布式架构的演进过程
前言正文架构的本质一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐渐碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序。架构的本质就是对系统进行有序化重构,使系统不断进化。那架构是如何实现无序到有序的呢?基本的手段就是分和合,先把系统打散,然后重新组合。分的过程是把系统拆分为各个子系统 / 模块 / 组件,拆的时候,首先...原创 2020-03-24 15:28:50 · 357 阅读 · 0 评论 -
MySQL相关(终结篇二)- SQL 语句分析与优化
前言正文优化器——SQL 语句分析与优化优化器就是对我们的 SQL 语句进行分析,生成执行计划。我们做项目的时候,有时会收到 DBA 的邮件,里面列出了我们项目上几个耗时比较长的查询语句,让我们去优化,这些语句是从哪里来的呢?我们的服务层每天执行了这么多 SQL 语句,它怎么知道哪些 SQL 语句比较慢呢?首先,我们要把 SQL 执行情况记录下来。慢查询日志 slow query lo...原创 2020-03-01 21:47:28 · 911 阅读 · 0 评论 -
MySQL相关(终结篇一)- 性能优化(配置及架构)
“你对 MySQL 的性能优化有什么想法?”很多出去面试的朋友应该基本上都会被问到这个问题,但是可能能够回答得尽善尽美的比较少,看过我专题且能够消化成自己肚子里的东西的朋友应该可以吊打面试官了哈哈哈哈(针对中高级),希望今天这篇文章之后大家能够对自己脑海中零散知识点进行整合整理,我盼着你们能回来给我报喜(当然吐苦水也可以),也盼着能跟大家一起不断进步。回到正题,关于这次的 MySQL 性能优化的知识点,我会分成两篇幅的文章来输出,关于 SQL 语句的性能优化我会以单独的篇幅来进行编写,语句优化在实操中原创 2020-03-01 21:46:31 · 516 阅读 · 1 评论 -
MySQL相关(九)- 死锁的发生和避免
在我们使用锁的时候,有一个问题是需要注意和避免的,我们知道,排它锁有互斥的特性。一个事务或者说一个线程持有锁的时候,会阻止其他的线程获取锁,这个时候会造成**阻塞等待,如果循环等待**,会有可能造成**死锁**。原创 2020-02-26 14:10:17 · 455 阅读 · 0 评论 -
MySQL相关(八)- innodb行级锁深入剖析
当一个事务锁住了一行数据的时候,其他的事务不能操作这一行数据,那它到底是锁住了这一行数据,还是锁住了这一个字段,还是锁住了别的什么东西呢?原创 2020-02-25 14:35:32 · 404 阅读 · 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 · 438 阅读 · 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 · 951 阅读 · 0 评论 -
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
上一篇文章我们介绍了MySQL 的四大事务特性 ACID,以及innodb 的事务隔离级别RU,RC,RR,可串行化,在结尾的时候我还卖了个关子,让大家思考一下 innodb 的事务隔离级别在 MySQL 中是如何实现的,不知道大家思考得咋样了,anyway,我们今天就在这里继续讲关于事务隔离级别的实现方案。原创 2020-02-17 15:54:49 · 663 阅读 · 0 评论 -
MySQL相关(五)- 事务特性及隔离级别的详细介绍
什么是数据库的事务?事务的典型场景在项目里面,什么地方会开启事务,或者配置了事务?无论是在方法上加注解,还是配置切面。<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes><tx:method name="save*" rollback-for="T...原创 2020-02-16 16:36:35 · 496 阅读 · 0 评论 -
MySQL相关(四)- 性能优化关键点(索引)
前言前面已经写了有两篇章长度的文章,第三篇我一直在寻思着要写什么(其实并没有),按照脑图来的话,这篇文章我们该来讲讲关于索引的知识了,这可是 MySQL 性能优化很关键的知识点,千万千万不要错过,不过我这里会相对比较深入地探究,相信大家读完之后多少会有点收获。先送上两张飞机票????还没读过前面文章的伙伴可以先前往阅读,由浅入深:MySQL相关(一)- 一条查询语句是如何执行的MySQL相关(二...原创 2020-02-04 17:14:42 · 629 阅读 · 0 评论 -
MySQL相关(番外篇)- innodb 逻辑存储结构
前言前面已经写了有两篇章长度的文章,第三篇我一直在寻思着要写什么(其实并没有),按照脑图来的话,这篇文章我们该来讲讲关于索引的知识了,这可是 MySQL 性能优化很关键的知识点,千万千万不要错过,不过我这里会相对比较深入地探究,相信大家读完之后多少会有点收获。先送上两张飞机票????还没读过前面文章的伙伴可以先前往阅读,由浅入深:MySQL相关(一)- 一条查询语句是如何执行的MySQL相关(二...原创 2020-02-04 17:10:09 · 874 阅读 · 0 评论 -
MySQL相关(二)- 一条更新语句是如何执行的
前言上一篇文章讲了 《一条查询语句是如何执行的》,应该很多人都注意到我在前缀 MySQL 相关后面加了个(一)吧,哈哈哈哈,有一肯定有二,认真负责的我怎么会只说查询语句的执行流程而不说更新修改删除语句的执行流程呢?说完这些流程原理之后肯定还要再说说索引方面的东西啦,至于啥时候能更新完,曦轩在这里只能说,尽情期待~这里有一张脑图,想要完整高清图片可以到微信我的公众号下【6曦轩】下回复 MySQL...原创 2020-01-30 20:34:27 · 931 阅读 · 0 评论 -
MySQL相关(一)- 一条查询语句是如何执行的
前言学习一个新知识最好的方式就是上官网,所以我先把官网贴出来 MySQL官网 (点击查阅),如果大家有想了解我没有说到的东西可以直接上官网看哈~目前 MySQL 最新大版本为8.0,但是鉴于目前应用比较多的还是 5.7,所以今天在这里还是针对 5.7 来做讨论。看了官网关于 MySQL 的介绍之后,我发现一个有趣的事情。在我身边的同事,很多都是把 MySQL 读错了,当然,也是因为大家已经约定...原创 2020-01-29 22:04:07 · 3474 阅读 · 0 评论 -
macOS 关于 VMware Fusion 键盘鼠标失灵的问题
场景拿了同事的 iMac 来用,我看到他前面装了一个 VMware 虚拟机,于是我问他那个是可以用的不,我打开一直黑屏,他说可以用,后面我重启了一下到了输入密码的界面,但是我鼠标和键盘一直聚焦不到里面去。猜想同事之前的 iMac 用来做 iOS 开发的,系统一直有做更新,而他估计也很久没打开过那个虚拟机了,可能是因为系统升级之后一些权限发生了改变导致鼠标和键盘失灵。解决到系统偏好设置-安...原创 2019-11-06 10:39:31 · 5788 阅读 · 0 评论 -
高性能的“NIO”框架——netty
前言细心的读者可能观察到,我在标题中关于"NIO"的词汇,加了双引号,在小学的时候啊,语文老师经常跟我们说,这里加双引号是什么什么作用,那我这边加双引号是要表示什么意思呢?哈哈哈,原谅我卖关子了,马上为大家带来我的看法,在netty中,很多资料其实都是说这是一个高性能的 NIO 框架(事实上也没错),我看了 netty 的源码,发现里面还包含了关于 OIO 的封装,但是 OIO 在新版本中的方法...原创 2019-11-05 16:13:19 · 375 阅读 · 0 评论 -
高效判断数字是否为2的幂次方
最近在看 netty 源码的一些实现,偶然看到这个判断数字是否为2的幂次方的方法,觉得很高效,所以贴出来跟大家一起分享:private static boolean isPowerOfTwo(int val) { return (val & -val) == val;}由于与运算符是处理器运算,要比其他的运算高效得多,这里拿8来举个例子:8 的二进制为 1000-8 ...原创 2019-07-23 17:18:46 · 238 阅读 · 0 评论 -
docker学习总结整理
前言关于 docker 的容器技术很早之前就有耳闻,一直以来就以为是一个类似虚拟机的东西,但是能更轻量级,方便开发和运维之间的环境部署这样。刚好最近有个需求要把原先的云服务器的东西迁移(之前都没用上容器技术),我马上就想到了 docker,经过一个星期的学习有了更深刻的了解,在此想分享下自己一些关于docker的知识和理解。总结docker是什么Docker 是一个开源的应用容器引擎,让开...原创 2019-06-26 14:14:27 · 300 阅读 · 0 评论 -
Dockerfile的编写指令
FROM功能为指定基础镜像,并且必须是第一条指令。如果不以任何镜像为基础,那么写法为:FROM scratch。同时意味着接下来所写的指令将作为镜像的第一层开始语法:FROM < image >FROM < image >:< tag >FROM < image >:< digest>三种写法,其中< tag...原创 2019-06-25 17:28:44 · 1710 阅读 · 2 评论 -
docker踩坑"Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon"
前言由于最近想把阿里云服务器上发布的内容做一下迁移,就想起之前有听说过的docker容器技术。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。发现在慢慢熟悉 docker 之后,准备将服务器的内容放到容器(container)中打包(...原创 2019-06-20 16:58:06 · 4099 阅读 · 4 评论 -
JVM GC相关(四)- 工具使用
前言前面几篇文章已经分别讲述了GC算法,垃圾回收器以及GC调优,今天在这里继续看下在工具上的使用。正文JvisualVM原创 2019-05-27 09:57:44 · 131 阅读 · 0 评论