自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 笔记本外接显示器,edge浏览器播放视频黑屏

解决笔记本外接显示器后,浏览器播放视频黑屏的问题

2023-10-08 23:44:53 492

原创 JDK 1.8 API 文档

在线下载地址https://www.oracle.com/java/technologies/javase-jdk8-doc-downloads.html在线浏览地址https://docs.oracle.com/javase/8/docs/api/?xd_co_f=47c934d9-e663-4eba-819c-b726fc2d0847

2022-05-17 11:23:29 445

原创 SpringBoot扩展SpringMVC的配置

官方文档:Spring Boot FeaturesIf you want to keep those Spring Boot MVC customizations and make more MVC customizations (interceptors, formatters, view controllers, and other features), you can add your own @Configuration class of type WebMvcConfigurer but .

2021-05-16 00:23:36 178

原创 SpringBoot静态资源默认路径

按优先级排序,参考:org.springframework.boot.autoconfigure.web.WebProperties.Resourcesclasspath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/

2021-05-16 00:22:04 183

原创 SSM整合(SpringMVC + Spring + MyBatis)

文章目录完整工程已上传到GitHub:[传送门](https://github.com/877254169/ssm-template.git)maven依赖MyBatis整合Spring整合SpringMVC整合注意事项完整工程已上传到GitHub:传送门新建一个空的maven项目maven依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"

2021-04-14 00:03:13 620 3

原创 SpringMVC原理解析【简洁版】

ps:只是用于学习原理,所以没有用注解那些东西SpringMVC原理图SpringMVC执行步骤step 0:用户发出请求(假设请求是“/hello”),请求进入web.xml中,被web.xml的DispatchServlet拦截,请求交由DispatchServlet处理。web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" .

2021-03-20 17:22:28 91

原创 MySQL 不走索引的情况

文章目录表信息1 函数操作2 隐式转换3 模糊查询4 范围查询5 计算操作6 总结表信息CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` varchar(20) DEFAULT NULL, `b` int(20) DEFAULT NULL, `c` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_a` (

2021-01-30 18:41:05 786

原创 MySQL explain慢查询

explain select * from t1 where a = 2000;id:查询编号select_type查询类型,显示本行是简单查询还是复杂查询table涉及到的表type本次查询的表连接类型possible_keys可能选择的索引key实际选择的索引key_len被选择索引的长度ref与索引比较的列rows预计需要扫描的行数,对 InnoDB 来说,这个值是估值,并不一定准确Extra附加信息select_type 的值解释

2021-01-30 16:43:37 120

转载 BigDecimal 开n次方根

public class BigRoot { public static void main(String[] args) { BigDecimal num = new BigDecimal("545.01"); long time; time = System.nanoTime(); BigDecimal root = bigRoot(num, 3, 8, BigDecimal.ROUND_HALF_UP); ti

2020-12-16 20:10:14 3313 2

原创 MyBatis查询报错:Expected one result (or null) to be returned by selectOne(), but found: 2

MyBatis在查询数据时,查询涉及到多张表,且查询的对象存在集合的属性时,如下查询会报错:Expected one result (or null) to be returned by selectOne(), but found: 2<resultMap id="classesMap" type="cn.jam.entity.Classes"> <id column="c.id" property="id"/> <result column="c.name

2020-08-14 00:22:39 4730

转载 maven阿里云镜像失效

参考:https://blog.csdn.net/lsy_cheer/article/details/107854951,得知阿里云镜像要用https协议了,而不是用http。修改依赖镜像如下:<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/</ur

2020-08-08 13:35:15 1020

原创 Redis学习_14_企业级解决方案_缓存穿透

文章目录现象原因解决方法现象系统平稳运行过程中, 应用服务器流量随时间增大,redis内存平稳,redis服务器CPU占用激增,数据库压力激增。原因redis中出现大面积未命中。出现非正常URL访问。如csdn某一篇博客的地址如下:https://blog.csdn.net/qq_33954947/article/details/107796253如果我们把最后的参数改一下,这个地址变成:https://blog.csdn.net/qq_33954947/article/details/10

2020-08-04 20:27:34 139

原创 Redis学习_14_企业级解决方案_缓存击穿

文章目录现象原因解决方法现象系统平稳运行过程中,数据库连接量瞬间激增,但是没有大量key过期,redis内存平稳,redis服务器CPU正常。原因某一个热点key过期了,这个key访问量巨大,导致大量请求在redis没拿到数据,直接从数据库拿,导致数据库崩溃。解决方法预先设定。对于一些可以预测到的热点数据,延长过期时间。现场调整。监控访问量,对访问量激增的数据延长过期时间 或 设置永久key。后台刷新数据。启动定时任务,在高峰期来之前,刷新数据有效期。设置二级缓存,且失效时间不同,保障不

2020-08-04 20:11:11 87

原创 Redis学习_14_企业级解决方案_缓存雪崩

文章目录现象原因解决方案理论层面实践方面现象系统运行过程中,突然数据库连接量暴增,数据库崩溃,应用服务器崩溃,重启应用服务器无效,redis服务器和集群崩溃,数据库重启后再次被瞬间流量放倒。原因在一个较短的时间内,缓存中较多的key集中过期。key过期后,开始直接请求数据库,数据库无法及时处理。redis请求开始积压,出现请求超时。请求积累到一定量后,服务器开始崩溃。解决方案理论层面更多的页面做静态化处理。构建多级缓存。Nginx + redis + ehcache优化耗时较长的SQL

2020-08-04 20:03:56 93

原创 Redis学习_14_企业级解决方案_缓存预热

文章目录现象问题排查原因解决方案前期准备准备工作实施现象服务器启动后,很快就宕机。问题排查请求的数据较多。主从之间的数据吞吐量比较大,一直在加载数据、同步数据。原因服务器刚启动后,redis缓存中没有数据,会需要加载数据到缓存中,这时候外部请求会对服务器造成压力,请求较多时,服务器就挂了。解决方案前期准备日常统计访问较多的数据。利用LRU数据删除策略,构建数据留存队列。准备工作根据统计数据的结果,对数据分类,先把访问较多的数据加载到redis中。利用分布式多服务器同时读

2020-08-04 19:41:44 98

原创 Redis学习_13_集群_相关配置与命令

cluster配置设置加入cluster,成为其中节点cluster-enabled yes|nocluster配置文件名,该文件自动生成,仅用于快速查找文件并查询文件内容cluster-config-file <filename>节点服务响应超时时间,用于判定该节点是否下线或切换为从节点cluster-node-timeout <milliseconds>master连接的slave最小数量cluster-migration-barrier <count&g

2020-08-01 20:10:28 79

原创 Redis学习_13_集群

文章目录单一服务器存在的问题什么是集群集群的作用集群结构的设计数据存储设计集群内部通信设计单一服务器存在的问题单机的redis服务器存在瓶颈,当业务的体量增大的时候,可能会无法支撑。什么是集群集群就是使用网络将若干计算机连通起来,并提供统一的管理方式,使其对外呈现单机的服务效果。集群的作用分散单台服务器的访问压力,实现负载均衡。分散单台服务器的存储压力,实现可扩展性。降低单台服务器宕机带来的业务灾难。集群结构的设计数据存储设计集群中的redis存储空间,一共会划分成16384个小

2020-08-01 19:46:18 95

原创 Redis学习_12_哨兵_工作原理<二>

文章目录故障转移发现问题投票选择sentinel,来处理问题处理故障故障转移发现问题在通知阶段,sentinel会不断给master发送hello命令,如果某一时刻,master没有回复sentinel了,sentinel就会重复发送hello,如果master一直没有回复,那么sentinel就会判定这个master挂了,于是给master一个标记:flags:SRI_S_DOWN。同时, sentinel会在他们的网络内发命令通知其他sentinel,这个master挂了,以及这个master的

2020-07-28 21:16:29 80

原创 Redis学习_12_哨兵_工作原理<一>

哨兵的主要作用就是进行主从切换,在这个过程中,有3个阶段:监控通知故障转移下面学习各个阶段的内容。监控阶段第一个sentinel启动的时候:sentinel连接master,通过info命令获取master的信息。拿到master的信息后,建立一个和master之间的cmd连接,方便传输命令。之后在自身和master中都存一份关于sentinel、master、slave的信息。通过master中的信息,取连接slave,获取slave的info。第二个sentinel启动的时

2020-07-27 20:42:55 97

原创 Redis学习_12_哨兵_搭建一个简易的哨兵结构

文章目录哨兵的配置主从结构的搭建(1个master对应2个slave)启动主从与哨兵验证哨兵的功能哨兵的配置在redis的目录里,有一个哨兵的配置文件:sentinel.conf,先看看这个里面是什么内容:下面解释一下其中一些内容:端口号容易理解,一般就是redis服务器的端口前面加一个2。sentinel monitor mymaster 127.0.0.1 6379 2,这一行是指定这个哨兵要监视哪一个master服务器,其中“mymaster”只是对这个master取的别名,可以自定义;

2020-07-25 12:34:33 303

原创 Redis学习_12_哨兵_基本介绍

文章目录概念作用概念哨兵(sentinel) 是分布式系统中,用于对主从结构中每台服务器进行监控,当出现故障时,通过投票机制选择新的master并将所有slave连接到新的master。作用监控不断的检查master和slave是否正常运行。master存活检测、master与slave运行情况检测。通知(提醒)当被监控的服务器出现问题时,向其他哨兵、客户端发送通知。自动故障转移断开master与slave的连接,选取一个master作为slave,将其他slave连接到新的maste

2020-07-22 20:49:15 86

原创 Redis学习_11_主从复制_常见问题

文章目录频繁的全量复制问题一问题二频繁的网络中断问题一问题二数据不一致频繁的全量复制问题一伴随着系统运行,master的数据会越来越多,一旦master重启,runid发生变化,会导致所有的slave都进行全量复制。redis内部的调优:master内部创建master_replid变量,使用runid相同的策略生成,长度41位,并发送给所有slave。在master关闭时执行命令 shutdown save,进行RDB持久化,将runid与offset保存到RDB文件中。master中存r

2020-07-20 21:15:43 135

原创 Redis学习_11_主从复制_心跳机制与命令传播

文章目录心跳机制心跳阶段注意事项命令传播流程心跳机制概念:进入命令传播阶段后,master与slave与要进行信息交换,使用心跳机制来进行维护,实现双方保持在线。master心跳:指令:PING周期:通过repl-ping-slave-period配置,默认时10秒。作用:判断slave是否在线查询:可以通过info replication查看,获取slave最后一次的连接间隔,lag是0或者1是正常的,超过1就可能是超时了。slave心跳:指令:replconf ack [

2020-07-18 13:44:05 619

原创 Redis学习_11_主从复制_数据同步+命令传播工作流程

2020-07-18 13:27:36 213

原创 Redis学习_11_主从复制_部分复制的3要素(run_id,缓冲区,偏移量)

文章目录服务器的运行id(run id)复制积压缓冲区主从服务器复制偏移量服务器的运行id(run id)概念:服务器每次运行时生成的id,用于身份识别,一台服务器每次启动时生成的运行id都是不同的。组成:运行id由40位随机的16进制字符组成。作用:用于服务器之前传输,做身份识别。实现方式:运行id在服务器启动时自动生成,master在首次连接一个slave时,会把运行id发给slave,slave会保存这个id,通过info server命令可以查看服务器的运行id。复制积压缓冲区概念:复

2020-07-16 20:27:48 1111

原创 Redis学习_11_主从复制_数据同步

文章目录数据同步的过程数据同步注意事项masterslave数据同步的过程主从复制的数据同步阶段大概有5步:slave创建同步请求。master创建RDB同步数据。slave恢复RDB同步数据。slave请求部分同步数据。slave恢复部分同步数据。至此,同步完成,稍微详细一些的内容可以看下图。数据同步注意事项master如果master数据量巨大,数据同步应该避开高峰期,避免造成master阻塞,影响正常业务。复制缓冲区大小设置不合理,会导致数据溢出。如果全量复制时间太长,

2020-07-15 20:55:46 101

原创 Redis学习_11_主从复制_建立连接

文章目录主从复制整体流程建立连接阶段的流程建立主从连接通过客户端发送命令建立连接启动服务器时通过参数建立连接通过服务器配置文件建立连接补充内容主从复制整体流程主从复制的整体流程可以分为3个阶段:建立连接阶段:由slave向master发起,建立与master之间的连接,master保存slave的端口号。数据同步阶段:master与slave建立连接后,master需要把目前已有的数据同步到slave机器上。命令传播阶段:数据同步之后,master后续的写数据的命令同样也要同步给slave。

2020-07-14 21:47:21 300

原创 Redis学习_11_主从复制_基本介绍

文章目录什么是高可用?高可用与Redismaster与slave什么是高可用?高可用简单点来说就是服务器可以对外提供服务的能力,计算公式为:(全年时间-全年服务器宕机时间)/全年时间高可用与Redisredis在单机的情况下,存在几个问题:机器发生故障时,容易造成数据丢失。redis的数据菜内存中,容易内存不足,内存的成本也比较大,企业不会无限制的加内存。基于这两个问题,如果redis出现问题,势必会影响服务器,从而有可能导致服务器不可用。为了解决redis的这个劣势点,redis提供了

2020-07-13 17:38:17 78

原创 Java Date#compareTo()中遇到的坑

今天遇到一个日期比较的bug,打断点跟进代码一看之后发现,在比较两个完全一样的日期时,尽然判断不相等。仔细看了下这2个日期后,发现他们一个是正常的date,另一个虽然也是一个date,但是是指向的timestamp。像下面这段代码这样:@Testpublic void dateCompareTest01() throws ParseException { String DateStr = "2020-07-03 23:59:59.999"; Timestamp ts = Timestam

2020-07-03 23:12:58 2342

原创 Redis学习_10_高级数据类型

文章目录Bitmaps简介操作HyperLogLog简介操作GEO简介操作Bitmaps简介Bitmaps是用bit(位)来存储数据的一种结构,由于是用bit来存储数据,一个位置上只能是0或1,所以其操作也十分简单,特点是节省空间。操作getbit key offset:获取指定key对应偏移量上的bit值。setbit key offset value:设置指定key对应偏移量上的bit值,value只能是0或1。HyperLogLog简介HyperLogLog是专门用来统计不重复数据数

2020-06-29 22:11:34 79

原创 Redis学习_9_服务器配置

文章目录服务器基本配置服务器端配置客户端配置多服务器快捷配置服务器基本配置服务器端配置设置服务器以守护线程的方式运行:daemonize yes|no绑定主机地址:bind 127.0.0.1设置服务器端口:port 6379设置数据库数量:databases 16服务器日志级别:loglevel debug|verbose|notice|warning,默认为verbose日志文件:logfile 端口号.log客户端配置同一时间最大客户端连接数,默认不限制。当连接达到上限时,r

2020-06-28 14:59:38 64

原创 Redis学习_8_逐出策略

文章目录删除策略 与 逐出策略 的对比影响数据逐出的相关配置删除策略 与 逐出策略 的对比删除策略是针对具有有效期的数据,如果所有数据都是永久的,但是内存又满了,新的数据不能存进来时,就需要用到逐出策略。逐出策略是指,在redis用内存储存操作前,先检查内存是否足够,不够的话临时删除一些数据来清理空间。注意:逐出算法不一定能成功,当所有数据都逐出失败时,会报OOM异常。影响数据逐出的相关配置最大可使用内存:maxmemory占用物理内存的比例,默认为0,表示全部占用。生产环境根据需求确认,一

2020-06-28 14:47:12 149

原创 Redis学习_7_删除策略

文章目录redis中的数据特征过期数据的底层结构定时删除惰性删除定期删除删除策略对比redis中的数据特征redis作为一个内存级数据库,数据都在内存中,我们可以通过TTL指令来查看数据的状态:非负整数:具有时效性的数据(剩余有效时间)-1:永久数据-2:已过期数据、被删除数据、未定义数据注意: redis中,执行完删除操作后,并不会马上把数据给删除,这要看具体的删除策略。过期数据的底层结构对于我们使用expire、expireat、setex这些操作添加的数据,除了在内存中给他们存储数

2020-06-20 17:32:04 190

原创 Redis学习_6_事务_锁

文章目录watch / unwatchsetnx(分布式锁)watch / unwatch当多个客户端需要操作同一个key时,就涉及到锁的问题了,在redis中,提供一个可以监视所需要操作的key的方法:watch key1 [key2 ...],这个方法表示监视某一个key,在事务开启前使用,如果在执行事务时,这个key发生了变化,事务将取消。unwatch,对应的,这个就是取消监视,注意,这个命令不能用在事务中。setnx(分布式锁)对于watch来说,重点是修改key,一旦key被修改

2020-06-06 14:31:35 113

原创 Redis学习_6_事务_基本操作

文章目录事务的基本操作事务的工作流程事务的注意事项事务的基本操作开启事务:multi,这个指令之后的命令,都会加入事务队列中,不会立即执行。执行事务:exec,将事务队列种的命令依次执行,与multi成对出现。multiset name Jamset age 22exec取消事务:discard,用法与exec一样,只能在multi之后使用。事务的工作流程事务的工作流程图如下:事务的注意事项事务中,如果命令出现语法错误(拼写错误等),整个事务队列将会被销毁。事务中,如

2020-05-31 16:29:03 78

原创 Redis学习_5_数据持久化_AOF

文章目录AOF简介RDB的弊端AOF概念AOF持久化策略开启AOF具体配置AOF的重写概念AOF重写的作用AOF重写规则AOF重写操作手动执行自动AOF重写AOF工作原理alwayseveryseceverysec + 重写AOFRDB对比AOF选择RDB还是AOF?AOF简介RDB的弊端对于前篇介绍的RDB持久化,他也并不是完美的,它存在有他的弊端,主要如下:数据量大时,存储效率低。大数据量时IO性能低。bgsave会通过fork创建子进程,产生额外的内存消耗。宕机时,会存在数据丢失。

2020-05-22 23:09:32 290

原创 Redis学习_5_数据持久化_RDB

文章目录redis数据持久化介绍save指令RDB相关配置redis数据恢复save指令工作原理bgsave指令与工作原理save配置与工作原理三种save方式对比rdb优点rdb缺点redis数据持久化介绍在实际生活中,不可能完全避免断电这种突发事件,如果发生断电,生产环境中redis里面的数据怎么办?redis提供了两种数据持久化的操作:RDB:将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据。AOF:将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关

2020-05-18 23:44:37 163

原创 Redis学习_5_Linux环境安装redis

文章目录redis的下载与安装redis启动时自定义端口通过指定配置文件启动redis的下载与安装将redis下载后解压到自定义目录,想放哪里放哪里,解压后的目录结构如下。编译安装:make install。可能会遇到这个错误,看了一下好像是与分配器有关,可以执行这个命令make MALLOC=libc来指定分配器。测试是否安装成功,在任意目录执行命令:redis-server如果可以正常启动redis就可以了,同时可以新建终端用redis-cli起一个客户端连接测试一下。redis启动时

2020-05-17 17:19:03 66

原创 Redis学习_4_jedis(Java连接redis数据库)

文章目录什么是jedis怎么使用使用redis来做一个小练习做一个jedis工具类附录jedis基本操作jedis小练习jedis工具类什么是jedisjedis就是Java用来连接redis数据库的工具。怎么使用直接下载jar包,这里提供网易的maven镜像仓库的jar,jedis-2.9.0.jar。通过maven依赖:<dependency> <groupId>redis.clients</groupId> <a

2020-05-13 20:27:39 184

原创 Redis学习_3_通用操作_db

redis中,key大多是由程序员自己定义,随着使用时间增加,数据增加,容易造成key重复的问题,为了解决这个问题,redis给数据库划分了16个区域,下标为0-15。下面看一下几个相关的命令。基本命令切换数据库:select index,如select 3,平常使用redis我们默认在0库。退出:quit。测试与服务器的连接:ping message,如ping success,后面的message是在联通服务器后返回的信息,可以不填,不填的话默认返回 “PONG”。控制台回显:echo me

2020-05-10 10:29:29 121

空空如也

空空如也

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

TA关注的人

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