• Atitit cache缓存之道 attilax 艾提拉总结 1. 使用缓存的目的(使用缓存) 1 1.1. 1、实现目标减少数据库的负担 1 1.2. 加快查询的速度 2 2. 缓存的常见参数 过


    Atitit cache缓存之道 attilax 艾提拉总结

    1. 使用缓存的目的(使用缓存) 1

    1.1. 1、实现目标减少数据库的负担 1

    1.2. 加快查询的速度 2

    2. 缓存的常见参数 过期时间(秒 2

    3. 缓存的实现远离原理 2

    4. 缓存标准jcache 2

    5. 缓存常见api的实现 2

    5.1. Get缓存 2

    6. 缓存刷新时间机制 3

    7. 缓存层级 系统架构中,不同层级之间为了加快访问速度,缓存都可以存在 3

    7.1. Indexdb localstore 3

    7.2. Redis 3

    7.3. Orm cache 3

    7.4. Dbcache 3

    8. 四、数据库缓存 4

    8.1. 2、缓存策略 aQuery Cache 4

    8.2. bData Buffer 4

    9. 缓存算法FIFOLRULFU三种 4

    10. 常见的缓存实施 5

    10.1. 优先使用spring cache  mybatiscacahe  最小化开发 5

    10.2. Guavacache  ehcache 工作量稍大,单可靠性高。 5

    10.3. 线程池futuretask写缓存  需要调整顺序 5

    10.4. Redis  最麻烦写 5

    11. 其他 7

    11.1. Key的生成算法那  getMethodName+ Param序列化 7

    1. 使用缓存的目的(使用缓存)

    1.1. 1、实现目标减少数据库的负担

      通过redis缓存数据。(目的不是加快查询的速度,而是减少数据库的负担)  

    1.2. 加快查询的速度

    2. 缓存的常见参数 过期时间(秒

    1.    private int maxSize=DEFAULT_MAXSIZE;    //最大數量  

    2.         private int ttl=DEFAULT_TTL;        //过期时间(秒)  

    3. 缓存的实现远离原理

    大多数缓存的解决方案是将数据存储在类似map的结构中(key-value),正因为如此,JCache API规范的标准也是基于map(类似)的结构。

    本地表格也可

    List缓存,条件查询wehere缓存

    其实缓存就是把一些外存上的数据保存到内存上而已,怎么保存到内存上呢,我们运行的所有程序,里面的变量值都是放在内存上的,所以说如果要想使一个值放到内存上,实质就是在获得这个变量之后,用一个生存期较长的变量存放你想存放的值,在java中一些缓存一般都是通过map集合来做的。 

    4. 缓存标准jcache

    5. 缓存常见api的实现

    5.1. Get缓存

    get的时候,可以设置个call,如果不存在则设置。。

    使用ex的模式不好,使用返回值也不好。。

    6. 缓存刷新时间机制

    如果cache支持,直接设置即可。

    如果cache不支持可以使用timer主动刷新。。

    7. 缓存层级 系统架构中,不同层级之间为了加快访问速度,缓存都可以存在

    · 操作系统磁盘缓存->减少磁盘机械操作

    · 数据库缓存->减少文件系统I/O

    · 应用程序缓存->减少对数据库的查询

    · Web服务器缓存->减少应用服务器请求

    · 客户端浏览器缓存->减少对网站的访问

    7.1. Indexdb localstore

    操作系统磁盘缓存->减少磁盘机械操作数据库缓存->减少文件系统I/O应用程序缓存->减少对数据库的查询Web服务器缓存->减少应用服务器请求客户端浏览器缓存->减少对网站的访问

     

    7.2. Redis

    7.3. Orm cache

    7.4. Dbcache

    8. 四、数据库缓存

    1、重要性

    数据库通常是企业应用系统最核心的部分数据库保存的数据量通常非常庞大数据库查询操作通常很频繁,有时还很复杂以上原因造成数据库查询会引起非常频繁的磁盘I/O读取操作,迫使CPU挂起等待,数据库性能极度低下

    8.1. 2、缓存策略 aQuery Cache

    SQL作为key值缓存查询结果集一旦查询涉及的表记录被修改,缓存就会被自动删除设置合适的Query Cache会极大提高数据库性能Query Cache并非越大越好,过大的Qquery Cache会浪费内存MySQL: query_cache_size= 128M

    8.2. bData Buffer

    data buffer是数据库数据在内存中的容器data buffer的命中率直接决定了数据库的性能data buffer越大越好,多多益善MySQLInnoDB bufferinnodb_buffer_pool_size = 2GMySQL建议buffer pool开大到服务器物理内存60-80%

    9. 缓存算法FIFOLRULFU三种

    主要分为FIFO,LRU和LFU三种,在技术点中会解释这三种是什么意思。大家一起研究和优化。笔者目前整理的一些blog针对面试都是超高频出现的。大家可以点击链接:http://blog.csdn.net/u012403290

    技术点:

    1、FIFO(First In First Out): 
    先入先出,很好理解,就和队列一样,先进队列的先出队列。

    2、LRU(Least Recently Used): 
    最近最少使用,意思就是最近读取的数据放在最前面,最早读取的数据放在最后面,如果这个时候有新的数据进来,那么最后面存储的数据淘汰。

    3、LFU(Least Frequently Used): 
    最不常使用,意思就是对存储的数据都会有一个计数引用,然后队列按数据引用次数排序,引用数多的排在最前面,引用数少的排在后面。如果这个时候有新的数据进来,把最后面的数据删除,把新进数据排在最后面,且引用次数为1

     

    10. 常见的缓存实施

    10.1. 优先使用spring cache  mybatiscacahe  最小化开发 

    10.2. Guavacache  ehcache 工作量稍大,单可靠性高。

    10.3. 线程池futuretask写缓存  需要调整顺序

    10.4. Redis  最麻烦写

    五、应用程序缓存

    1、对象缓存

    O/R Mapping框架例如Hibernate提供,透明性访问,细颗粒度缓存数据库查询结果,无需业务代码显式编程,是最省事的缓存策略当软件结构按照O/R Mapping框架的要求进行针对性设计,使用对象缓存将会极大降低Web系统对于数据库的访问请求良好的设计数据库结构和利用对象缓存,能够提供极高的性能,对象缓存适合OLTP(联机事务处理)应用

    2、查询缓存

    对数据库查询结果集进行缓存,类似数据库的Query Cache适用于一些耗时,但是时效性要求比较低的场景。查询缓存和对象缓存适用的场景不一样,是互为补充的当查询结果集涉及的表记录被修改以后,需要注意清理缓存

    3、页面缓存

    a、作用

    针对页面的缓存技术不但可以减轻数据库服务器压力,还可以减轻应用服务器压力好的页面缓存可以极大提高页面渲染速度页面缓存的难点在于如何清理过期的缓存

    b、分类

    I、动态页面静态化

    利用模板技术将访问过一次的动态页面生成静态html,同时修改页面链接,下一次请求直接访问静态链接页面动态页面静态化技术的广泛应用于互联网CMS/新闻类Web应用,但也有BBS应用使用该技术,例如Discuz!无法进行权限验证,无法显示个性化信息可以使用AJAX请求弥补动态页面静态化的某些缺点

    IIServlet缓存

    针对URL访问返回的页面结果进行缓存,适用于粗粒度的页面缓存,例如新闻发布可以进行权限的检查OScache提供了简单的Servlet缓存(通过web.xml中的配置)也可以自己编程实现Servlet缓存

    III、页面内部缓存

    针对动态页面的局部片断内容进行缓存,适用于一些个性化但不经常更新的页面(例如博客)OSCache提供了简单的页面缓存可以自行扩展JSP Tag实现页面局部缓存

    六、web服务器端缓存

    基于代理服务器模式的Web服务器端缓存,如squid/nginxWeb服务器缓存技术被用来实现CDN(内容分发网络 content delivery network)被国内主流门户网站大量采用不需要编程,但仅限于新闻发布类网站,页面实时性要求不高

    七、基于ajax的浏览器缓存

    使用AJAX调用的时候,将数据库在浏览器端缓存只要不离开当前页面,不刷新当前页面,就可以直接读取缓存数据只适用于使用AJAX技术的页面

    11. 其他

    11.1. Key的生成算法那  getMethodName+ Param序列化

    //在Service层写注解 @Cacheable(value = "myCache", key = "getMethodName()")

     

    getMethodName+ Param序列化

    干货_java缓存技术详解.html

  • 相关阅读:
    Spring 多数据源 @Transactional 注解事务管理
    Spring 多数据源 @Transactional 注解事务管理
    Spring 与 SpringMVC 容器父子关系引出的相应问题
    Spring 与 SpringMVC 容器父子关系引出的相应问题
    Mongodb 备份 还原 导出 导入 等批量操作
    Mongodb 备份 还原 导出 导入 等批量操作
    关于WEB-INF目录不提供外部访问及JSP引用 js,css 文件路径问题
    关于WEB-INF目录不提供外部访问及JSP引用 js,css 文件路径问题
    svn工具的使用问题总结
    svn工具的使用问题总结
  • 原文地址:https://www.cnblogs.com/attilax/p/15197657.html
Copyright © 2020-2023  润新知