zoukankan      html  css  js  c++  java
  • 关于缓存击穿

    什么是缓存击穿?

    我们先来看一段经典的代码,关于缓存使用的

    查询先从缓存里面获取,缓存如果没有,那么再从数据库查询,并且写入缓存。

    注意:在实际开发中,我们一般在缓存中,存储的数据结构是JSON字符串。

    那么 就会有一个问题,假如从数据查询需要1秒时间

    那么这1秒内请求都会直接到db,缓存被击穿,如果请求特别大的时候,可能数据库就会挂掉。

    那应该那么解决? 我们一般采用,同步+双重检查的方式

    请看代码

    当第一次从缓存获取失败,我们就同步

    当缓存失效以后

    第二次进来以及后面的请求,都会从缓存里面获取

    而第一次请求进来的请求会直接查询数据库会放入缓存中。

    优化总结:

    思考1 在实际开发中,其实缓存的逻辑是差不多,只是获取数据的方式不一样?想想能不能抽象下?

    这里我做个代码演示

      

    实际调用的时候

    List<Content> contents = contentServImp.getData("cache" + cateId, 20L, new CacheLoader<List<Content>>() {
    			@Override
    			public List<Content> getData() {
    		         List<Content> contents = contentMapper.selectByExample(null);
    	                 return contents;
    			}
    		});
    

      

  • 相关阅读:
    no.5.print sum
    0.1 hint crack
    no.4 抽奖测试
    no2.crossdomain.xml批量读取(待完善)
    no.1
    day7-读写分离
    day6-主从
    day5-备份
    day4-用户授权
    Day3-体系结构+查询+导入/出
  • 原文地址:https://www.cnblogs.com/javabigdata/p/7653216.html
Copyright © 2011-2022 走看看