- 博客(128)
- 收藏
- 关注
转载 SpringBoot与缓存、消息、检索、任务、安全与监控
一、Spring抽象缓存Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化开发。Cache接口为缓存的组件规范定义,包含缓存的各种操作集合。Cache接口下Spring提供了各种Cache...
2019-06-10 18:38:00
260
转载 SpringBoot的启动配置原理
一、启动流程创建SpringApplication对象public class SpringApplication { public SpringApplication(Class... primarySources) { this((ResourceLoader)null, primarySources); } public Spr...
2019-06-10 18:36:00
291
转载 SpringBoot的数据访问
一、JDBC方式引入starter。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> ...
2019-06-10 18:32:00
177
转载 关于SpringBoot的自动配置和启动过程
一、简介Spring Boot简化了Spring应用的开发,采用约定大于配置的思想,去繁从简,很方便就能构建一个独立的、产品级别的应用。1.传统J2EE开发的缺点开发笨重、配置繁多复杂、开发效率低下、部署流程复杂、第三方技术集成难度大。2.SpringBoot的优点快速重建独立运行的Spring项目以及与主流框架集成。使用嵌入式的Servlet容器,应用无需打成WAR包...
2019-06-05 02:11:00
1011
转载 关于Mybatis的几件小事(二)
一、MyBatis缓存机制1.简介Mybatis包含了一个非常强大的查询缓存的特性,它可以非常方便地配置和定制。缓存key极大提高查询效率MyBatis系统中默认定义了两次缓存默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存)开启。二级缓存需要手动开启和配置,它是基于namespace级别的缓存。为了提高扩展性,MyBatis定义了缓存接口cac...
2019-06-03 20:09:00
136
转载 关于Mybatis的几件小事(一)
一、Mybatis简介1.Mybatis简介MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解用于配置和冤死映射,将接口和Java的POJO(Plain Old Java Objects,普通的java对象)映射成数据库中的记录。2.为...
2019-06-03 17:25:00
251
转载 关于SpringMVC拦截器和异常
一.文件上传1.文件上传SpringMVC为文件上传提供了直接的支持,这种类型是通过即插即用的MultipartResolver技术的。Spring用Jakarta Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver.SpringMVC上下文中默认没有装配MultipartResolver...
2019-06-01 02:19:00
194
转载 关于SpringMVC的几件小事
一.SpringMVC表单标签He处理静态资源1.Spring的表单标签通过SpringMVC的表单标签可以实现将模型数据中的属性和HTML表单元素相绑定,以实现表单数据更便捷编辑和表单值的回显。1.form标签一般情况下,通过GET请求获取表单页面,而通过POST请求提交表单页面,因此获取表单页面和提交表单页面的URL是相同的。只要满足该最佳条件的契约,标签就无需通过acti...
2019-05-31 22:19:00
134
转载 关于SpringMVC映射模型视图的几点小事
一.SpringMVC概述SpringMVC为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一。SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,而无需实现任何接口。支持RESTFUL风格的URL。采用了松散耦合可插拔组件结构,更具灵活性和扩展性。二.使用@RequestMapping映射请求1.使用@Request...
2019-05-31 15:59:00
159
转载 关于spring中事务管理的几件小事
1.Spring中的事务管理作为企业级应用程序框架,Spring在不同的事务管理API之上定义了一个抽象层。而应用程序开发人员不必了解底层的事务管理API,就可以使用Spring的事务管理机制。Spring既支持编程式事务管理,也支持声明式的事务管理。编程事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚。在编程式管理事务时,必须在每个事务操作中包含额外的事务管理...
2019-05-31 02:07:00
121
转载 关于spring中AOP的几件小事
0.AOP简介AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是穿透OOP的补充。AOP的主要编程对象是切面(aspect),而切面模块化横切关注点。在使用AOP编程时,仍然需要定义功能功能,但可以明确的定义这个功能在哪里,以什么方式应用,并且不必修改受影响的类。这样一来横切关注点就被模块化到特殊的对象(切面)里。AOP的...
2019-05-31 00:25:00
94
转载 关于spring中bean配置的几件小事
一.IOC和DI1.IOC(Inversion of Control)其思想是反转资源获取的方向。传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源;而应用了IOC之后,则是容器主动的将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接收资源。这种行为也被成为查找的被动形式。2.DI(Dependency Injection)IOC的另一...
2019-05-30 18:53:00
184
转载 关于mysql事务的几件小事
零.MyISAM和InnoDB关于锁的区别①MyISAM默认用的是表级锁,不支持行级锁。②InnoDB默认用的是行级锁,也支持表级锁。③共享锁和排它锁的兼容性|X|排它锁|共享锁|-|-|-排它锁|冲突|冲突共享锁|冲突|兼容④使用场景MyISAMA: 频繁执行全部count语句。B: 对数据进行增删改的频率不高,查询非常频繁。C:不需要支持事务。InnoDB...
2019-05-30 01:25:00
128
转载 关于MySQL的索引的几件小事
零.索引简介1. 索引是什么①MySQL官方对索引的定义是:索引(Index)是帮助MySQL高效获取数据的数据结构。②可以简单的理解为“排好序的快速查找数据结构”。③除了数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这种数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。④一般来说索引本身也很大,不可能全部存储在内...
2019-05-29 20:48:00
120
转载 分库分布的几件小事(五)MYSQL读写分离
1.为什么进行读写分离这个,高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是app,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压力了吗?2.如何实现mysql读写分离其实很简单,就是基于主从复制架构,简单来说,就是搞一个主库,挂多个从库,然后我们就只是写主库,...
2019-05-26 01:09:00
140
转载 分库分布的几件小事(四)分库分表的id主键生成
1.问题其实这是分库分表之后你必然要面对的一个问题,就是id咋生成?因为要是分成多个表之后,每个表都是从1开始累加,那肯定不对啊,需要一个全局唯一的id来支持。所以这都是你实际生产环境中必须考虑的问题。2.生成方案(1)数据库自增id方案原理 :这个就是说你的系统里每次得到一个id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个id。拿到这个id...
2019-05-26 00:29:00
192
转载 分库分布的几件小事(三)可以动态扩容缩容的分库分表方案
1.扩容与缩容这个是你必须面对的一个事儿,就是你已经弄好分库分表方案了,然后一堆库和表都建好了,基于分库分表中间件的代码开发啥的都好了,测试都ok了,数据能均匀分布到各个库和各个表里去,而且接着你还通过双写的方案咔嚓一下上了系统,已经直接基于分库分表方案在搞了。那么现在问题来了,你现在这些库和表又支撑不住了,要继续扩容咋办?这个可能就是说你的每个库的容量又快满了,或者是你的表数据量又...
2019-05-25 23:49:00
176
转载 分库分布的几件小事(二)如何进行分库分表的数据迁移
1.停机迁移方案这是最简单的也是最low的迁移方案了,如果系统就算短期停机也没有关系或者造不成多大的影响,可以选用此方案。首先停掉机器,将系统全都停掉,不要再有新的数据进来,然后使用之前写好的程序,连接旧的数据库,将旧数据库里面的数据读出来,然后通过数据分发中间件写到分库分好的数据里面去。然后修改系统是数据库连接、分库分表配置,然后重新上线。2.双写不停机迁移方案双写迁移方案的核...
2019-05-25 23:22:00
306
转载 分库分布的几件小事(一)数据库如何拆分
1.为什么要分库分表①分库分表说白了,就是因为数据量太大了,如果你的单表数据量都到了千万级别,那么你的数据库就无法承受高并发的要求,数据库操作性能就会出现极大的下降。②数据库并发量太大了,一般而言,一个数据库最多支撑并发到2000,这时候一定要进行扩容,不然性能会出现严重下降。而且一个健康的单库并发值你最好保持在每秒1000左右,不要太大。那么你可以将一个库的数据拆分到多个库中,访问...
2019-05-25 23:06:00
198
转载 分布式的几件小事(十二)分布式事务
1.两阶段提交方案/XA方案。原理 这个就是所谓的XA事务,两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复ok,那么就正式提交事务,在各个数据库上执行操作;如果任何一个数据库回答不ok,那么就回滚事务。适用场景:比较适合单块应用里,跨多个库的分布式事务。缺点因为严重依赖于数据库层面来搞复杂...
2019-05-25 16:19:00
113
转载 分布式的几件小事(十一)分布式session如何实现
1.分布式会话是什么?首先,我们知道浏览器有个cookie,在一段时间内这个cookie都存在,然后每次发请求过来都带上一个特殊的jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的session域,里面可以放点儿数据。其次,单系统的时候session是不存在问题的。分布式系统出现session问题的场景:比如系统部署了3台机器,用户登录的时候,负载均衡...
2019-05-25 15:14:00
95
转载 分布式的几件小事(十)分布式锁是啥
1.什么是分布式锁分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那...
2019-05-25 14:38:00
153
转载 分布式的几件小事(九)zookeeper都有哪些使用场景
1.zookeeper介绍ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户...
2019-05-25 12:55:00
115
转载 分布式的几件小事(八)分布式服务接口请求的顺序性如何保证
1.调用顺序其实分布式系统接口的调用顺序,也是个问题,一般来说是不用保证顺序的。但是有的时候可能确实是需要严格的顺序保证。给大家举个例子,你服务A调用服务B,先插入再删除。好,结果俩请求过去了,落在不同机器上,可能插入请求因为某些原因执行慢了一些,导致删除请求先执行了,此时因为没数据所以啥效果也没有;结果这个时候插入请求过来了,好,数据插入进去了,那就尴尬了。本来应该是先插入 -&g...
2019-05-25 12:33:00
421
转载 分布式的几件小事(七)分布式系统接口的幂等性如何保证
1.幂等性所谓幂等性,就是说一个接口,多次发起同一个请求,你这个接口得保证结果是准确的,比如不能多扣款,不能多插入一条数据,不能将统计值多加了1。这就是幂等性。2.如何保证幂等性①对于每个请求必须有一个唯一的标志,比如订单支付请求,必须要包含订单的id,一个id只能支付一次。②每次处理完请求之后,必须要有一个记录标识这个请求已经处理过了,比如最常见的是在mysql中记录一个状态,...
2019-05-25 12:21:00
224
转载 分布式的几件小事(六)dubbo如何做服务治理、服务降级以及重试
1.服务治理服务治理主要作用是改变运行时服务的行为和选址逻辑,达到限流,权重配置等目的。①调用链路自动生成一个大型的分布式系统,会由大量的服务组成,那么这些服务之间的依赖关系和调用链路会很复杂,这就需要dubbo对多个服务之间的调用自动记录下来,生成一张图,显示出来。②服务反复问压力以及时长统计需要自动统计各个接口和服务之间的调用次数以及访问延时,而且要分成两个级别。一个级别是...
2019-05-25 11:53:00
87
转载 分布式的几件小事(五)dubbo的spi思想是什么
1.什么是SPI机制SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如jdbc。java定义了一...
2019-05-25 02:21:00
129
转载 分布式的几件小事(四)dubbo负载均衡策略和集群容错策略
1.dubbo负载均衡策略①random loadbalance 策略默认情况下,dubbo是random loadbalance 随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权重来进行负载均衡,权重越大分配的流量越高,一般就用这个默认的就可以了。②roundrobin loadbalance策略这个策略默认会将请求均匀的分布到各个provider上...
2019-05-25 01:58:00
61
转载 分布式的几件小事(三)dubbo的通信协议与序列化
1.dubbo的通信协议①dubbo协议Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。特点 :dubbo缺省协议,使用的是基于netty+hessian的tbremoting交互。连接个数:单连接。连接方式:长连接。传输协议:TCP。传输方式:NIO异步传输。使用范围:传入...
2019-05-25 01:36:00
106
转载 分布式的几件小事(二)dubbo的工作原理
1.dubbo的工作原理①整体设计图例说明:图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。图中绿色小块的为扩展接口,蓝色小块为...
2019-05-25 00:46:00
82
转载 分布式的几件小事(一)为什么要把系统拆分成分布式的
1.为什么进行拆分①项目过于庞大维护困难。如果系统过去庞大,那么代码会有很多,达到几十万行上百行,这样就需要很多人一起来维护一份代码,这样就很容易造成各种冲突,这样光合并代码就会浪费大量的时间在上面。②项目发布复杂。一个小bug的修改发布需要整个系统全部进行重新发布,这样就很麻烦,不但发布后需要大量的测试,不管这个bug和自己负责的模块是否有关系,上线之后都要去检查,防止自己的模...
2019-05-24 23:40:00
219
转载 关于redis的几件小事(十)redis cluster模式
redis cluster是redis提供的集群模式。1.redis cluster的架构①可以有多个master node,每个master node 都可以挂载多个slave node。②读写分离的架构,对应每个master node来说,写就写到master node,读就从master node对应的slave node去读。③高可用。每个master node都有多个 ...
2019-05-24 02:46:00
102
转载 关于redis的几件小事(九)redis的并发竞争问题
1.什么是并发竞争就是多客户端同时并发写一个key,可能本来应该先到的数据后到了,导致数据版本错了。或者是多客户端同时获取一个key,修改值之后再写回去,只要顺序错了,数据就错了。2.怎么解决采用分布式锁+数据修改的时间戳 方案来解决。①想要向缓存中写入数据时,必须要获得分布式锁,只有获得锁了才可以去进行缓存数据的写入,写入结束释放锁。就可以保证同时只有一个客户端去写缓存。②可...
2019-05-23 23:48:00
94
转载 关于redis的几件小事(八)缓存与数据库双写时的数据一致性
1.Cache aside pattern这是最经典的 缓存+数据库 读写模式,操作如下:①读的时候,先读缓存,缓存没有就读数据库,然后将取出的数据放到缓存,同时返回请求响应。②更新的时候,先删除缓存,然后更新数据库。2.为什么是删除缓存,而不是更新缓存呢?①因为很多时候,缓存中放的并不是简单的从数据中取出来值,可能要进行一个状态的替换,一些数据的计算,还有可能要进行数据的组合...
2019-05-23 23:20:00
69
转载 关于redis的几件小事(七)redis缓存雪崩与穿透
1.缓存雪崩(1)什么是缓存雪崩缓存雪崩指的是在同一时刻,缓存大量失效,导致大量的请求直接到了数据库,数据库压力剧增,引起系统崩溃。可能出现的情况有:①大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。②缓存系统出现故障,造成缓存系统无法提供服务,造成瞬时DB请求量大、压力骤增,引起雪崩。(2)怎么避免缓存雪崩事前 :...
2019-05-23 22:45:00
62
转载 关于redis的几件小事(六)redis的持久化
1.redis持久化的意义redis持久化的意义,在于 故障恢复 。如果没有对数据进行持久化,那么如果redis遇到灾难性的故障,就会丢失所有的数据。如果通过redis的持久化机制将数据持久化到硬盘上面去,然后在定期将磁盘上的文件备份到一起其他的服务器上面(比如:云服务器),这样就可以保证即使redis遇到了灾难事故,也可以使用提前备份的文件对数据进行回复,之后丢失最近的一部分数据...
2019-05-23 22:14:00
64
转载 关于redis的几件小事(五)redis保证高并发以及高可用
如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了,redis高可用redis高并发:主从架构,一主多从,一般来说,很多项目其实就足够了,单主用来写入数据,单机几万QPS,多从用来查询数据,多个从实例可以提供每秒10万的QPS。redis高并发的同时,还需要容纳大量的数据:一主多从...
2019-05-23 19:44:00
126
转载 关于redis的几件小事(四)redis的过期策略以及内存淘汰机制
1.数据为什么会过期?首先,要明白redis是用来做数据缓存的,不是用来做数据存储的(当然也可以当数据库用),所以数据时候过期的,过期的数据就不见了,过期主要有两种情况,①在设置缓存数据时制定了过期时间,这样到了过期时间数据就不见了。②redis的数据是存放在内存中的,而内存是有限的,是不可能放过多数据的,比如只有10G的内存,想要向里面放入20G的数据,那么就注定会有10G的数据...
2019-05-23 15:39:00
73
转载 关于redis的几件小事(三)redis的数据类型与使用场景
1.string这是最基本的类型了,就是普通的set和get,做简单的kv缓存。2.hash这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段。key=150value={ “id”: 150, “name”: “zhangsan”, ...
2019-05-23 14:29:00
86
转载 关于redis的几件小事(二)redis线程模型
1.memcached和redis有什么区别?(1)Redis支持服务器端的数据操作redis和memcached相比,redis拥有更多的 数据结构并且支持更丰富的数据操作 ,通常在memcached里面,你需要将数据拿到客户端来进行类型的修改然后在set回去,这样就严重增加了网络IO的次数和数据体积。在redis里面,这些操作可以在服务端完成,所以这些复杂的操作就和一般的GET/...
2019-05-23 14:00:00
72
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人