小白入职记(一):基于spring的简单配置缓存

作为一个刚毕业的实习期职场小白,初进公司,才发现公司的项目与大学布置的项目作业完全不一样,无论是技术的深度还是交付所需考虑的情况,都不可相提并论。因此,打算写个系列博客,总结一些学到的知识点,也顺便记录下职场生活,不管是对自己的技术水平还是文笔,想想也是没有坏处的吧。
公司的项目里面很多地方都用到了配置项,比如将下拉框的选项配置进数据库中,使用的时候异步请求数据库来返回具体的下拉选项。我在做项目中的某个查询功能的时候,需要对传入的下拉选项在后端做校验,若每次请求都需要校验该项是否为数据库中的配置,就会多次查询数据库,这样的话无论是对性能还是服务器的压力总归是不太好的。于是我请教了同事,同事告诉我可以将配置信息存在内存缓存中,这样每次开启服务器的时候,一次查询,一直使用。

  1. 先定义配置项的封装类
/**
 * 用于存放需要缓存的配置信息
 * 可以缓存任何你需要缓存的数据类型
 * 可以在一个类似ResourceCacheInfo的类中封装多种配置项
 * 也可以将不同配置项封装在一个或多个类似ResourceCacheInfo的类中
 */
public class ResourceCacheInfo {
    /**
     * 下拉框选项
     * 例1:用于存放下拉框的选项集合
     */
    private List<Map<String,String>> selectItems;
    //
    /**
     * 项目基础配置项
     * 例2:用于存放全局配置信息项
     */
    private List<Map<String,String>> configInfo;

    public List<Map<String, String>> getSelectItems() {
        return selectItems;
    }

    public void setSelectItems(List<Map<String, String>> selectItems) {
        this.selectItems = selectItems;
    }

    public List<Map<String, String>> getConfigInfo() {
        return configInfo;
    }

    public void setConfigInfo(List<Map<String, String>> configInfo) {
        this.configInfo = configInfo;
    }
}
  1. 创建缓存工厂
/**
 * 配置项缓存工厂
 */
@Component
public class ResourceCacheFactory {
    //日志
    private static Logger Log = Logger.getLogger(ResourceCacheFactory.class);

    /**
     * 使用@bean注解可以在执行完该方法后,在其他地方可以注入并使用
     *
     * @return
     */
    @Bean
    public ResourceCacheInfo getCache() {
        Log.info("开始加载缓存");
        ResourceCacheInfo cache = new ResourceCacheInfo();
        Log.info("加载下拉框缓存");
        //模拟查询数据库
        cache.setSelectItems(getSelectItemFromDB());
        Log.info("加载配置项缓存");
        //获取公共配置项
        cache.setConfigInfo(getConfigInforomDB());
        return cache;
    }
  1. 测试访问缓存
    //自动注入bean
    @Autowired
    private ResourceCacheInfo cache;

    @GetMapping("/cache")
    public ResourceCacheInfo getCache() {
        Log.info("下拉框缓存内容:"+cache.getSelectItems());
        Log.info("配置项缓存内容:"+cache.getConfigInfo());
        return cache;
    }

可以看到在服务器启动的时候,已经开始查询并添加进缓存

12:11:20,056  INFO ResourceCacheFactory:31 - 开始加载缓存
12:11:20,057  INFO ResourceCacheFactory:33 - 加载下拉框缓存
12:11:20,058  INFO ResourceCacheFactory:36 - 加载配置项缓存
2019-11-10 12:11:20.209  INFO 14356 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-11-10 12:11:20.338  INFO 14356 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2019-11-10 12:11:20.376  INFO 14356 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8180 (http) with context path ''
2019-11-10 12:11:20.378  INFO 14356 --- [  restartedMain] com.example.demo.DemoApplication         : Started DemoApplication in 4.391 seconds (JVM running for 15.558)

测试访问缓存地址http://localhost:8180/cache

12:14:09,377  INFO CacheRes:19 - 下拉框缓存内容:[{下拉选项一=下拉选项一}, {下拉选项二=下拉选项二}, {下拉选项三=下拉选项三}]
12:14:09,378  INFO CacheRes:20 - 配置项缓存内容:[{MAX_IMAGE_UPLOAD_LENGTH=3}, {REQUEST_TIME_OUT=20000}, {ALLOW_HTTPS_LOGIN=1}]

可以看到缓存已经成功获取到了,这下其它地方需要引用的话,就使用

    @Autowired
    private ResourceCacheInfo cache;

即可获取,不需要重复查询数据库,增加访问速度,也可以减轻服务器的压力。

但还有不完善的地方:

  • 由于是服务器一次启动则读取缓存,若配置项发生变动,理论上只有重启才能刷新缓存,正常情况下项目是部署在生产服务器上的,不可能随时重启,因此还需要在缓存工厂中新增一个刷新缓存的方法,实现不重启服务器即可刷新缓存的功能。
  • 这种缓存方式只是最简单,最容易实现的方式,spring还有自带的缓存注解等,还需要考虑的有很多。

作为一个萌新,非常希望大家给我一点建议或指出我的不足,我一定虚心接受,若能让其它小伙伴得到一点点帮助或启发,我会感到非常开心的(●’◡’●)
这是这个demo的github地址:https://github.com/yuanbwhub/cache-demo和我的qq1252615137,欢迎小伙伴加我交流,我们共同进步~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值