0%
Mybatis之——分页插件PageHelper的使用
Mybatis之——Druid + mysql8报错:应用方的数据库连接有效期时间,大于数据库自己设置的有效期。
Spring MVC之——全局异常处理
方式1:实现HandlerExceptionResolver接口
不推荐
1 | public class HandlerExceptionResolverImpl implements HandlerExceptionResolver { |
方式二:使用注解方式
1 | // 全局contoller抛出的异常处理 |
人资管理体系如何分为6、4、3大模块
Redis之——缓存穿透、缓存击穿、缓存雪崩
初步认识
缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。
缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。
缓存穿透解决方案
有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。
缓存击穿解决方案
key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。这个时候,需要考虑一个问题:缓存被“击穿”的问题。
使用互斥锁(mutex key)
业界比较常用的做法,是使用mutex。简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法。
SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果。
个人理解:在缓存失效后,想要再次缓存时,添加一个互斥锁,只让一条线程访问数据库加缓存,缓存完毕后立一个flag告诉别的线程已经缓存好了,直接缓存取
缓存雪崩解决方案
- 大多数系统设计者考虑用加锁或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。
- 还有一个简单方案就时讲缓存失效时间分散开,比如我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件
Oracle数据库之——入门
oracle介绍
ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组
软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。比如
SilverStream 就是基于数据库的一种中间件。ORACLE 数据库是目前世界上使用最为广泛的数据
库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,
它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只
要在一种机型上学习了 ORACLE 知识,便能在各种类型的机器上使用它。
Oracle 数据库是数据的物理存储。这就包括(数据文件 ORA 或者 DBF、控制文件、联机日志、参数文件)。
其实 Oracle 数据库的概念和其它数据库不一样
这里的数据库是一个操作系统只有一个库。
可以看作是 Oracle 就只有一个大数据库。
Spring MVC之——SSM整合
搭建整合环境
详细信息可以进入以下网址查看
http://www.mybatis.org/spring/
整合说明:SSM整合可以使用多种方式,咱们选择XML + 注解的方式
整合的思路
- 先搭建整合的环境
- 先把Spring的配置搭建完成
- 再使用Spring整合SpringMVC框架
- 最后使用Spring整合MyBatis框架
ps:其实都无所谓啦。。。下面为了看起来不臃肿,代码不重复放出来