• 数据字典的缓存刷新与读取的几种方式


    之前有写过数据字典的相关业务是怎么做的,有朋友留言问如何读取,其实很简单,最简单的方式就是每次读取数据库,但是这样的做法很不好,因为数据字典在数据库中属于冷资源,不是经常会变得数据,这样的数据用缓存来做是最好的,在访问数据库前就直接拦截了去数据库的请求,这样减少数据库的压力,毕竟很多页面对于数据字典的访问还是偏多的

    画张图简单了解一下就行:

    那怎么把数据放入redis中呢?主流的两种做法大致说一下吧:

    1. 在每次进行增删改数据字典的操作后,发送一个消息队列,进行单独记录在redis中的维护(这样的做法我个人不是很喜欢,因为有时候写错了就要重修修改或者删除,这样的频繁操作比较多)

    2. 在每次进行数据字典的增删改后,最后手动执行刷新,这样批量把数据放入缓存中,最后在页面上就能直接用了

    在此小编我用的是第二种做法,如图:


    在之前的页面上加了刷新缓存的按钮,动态ajax到后台,读取数据库中的数据字典再刷新到缓存中去(有人说这样频繁的操作会很不好,话是这么说,但是这样的操作权限仅限在项目发布成功后,再执行的操作,一般都是大半夜,毫无影响..--)

    先来看一下数据库的数据

    再看一下缓存中的数据


    不难看出,都是一一对应的

    最后再来看一下自定义标签,这个主要的目的就是接受jsp上传来的key和对应的数据字典code,最后把value返回出来

    private JedisClient jedis = SpringUtils.getContext().getBean(JedisClient.class);
        
        public void doTag() throws JspException, IOException {
            if (StringUtils.isNotEmpty(typeCode) && StringUtils.isNotEmpty(ddKey)) {
                String ddValue = jedis.get(CACHE_DATA_DICTS + ":" + typeCode + ":" + ddKey);
    
                JspWriter out = getJspContext().getOut();
                out.println(ddValue);
            } else {
                getJspBody().invoke(sw);
                getJspContext().getOut().println(sw.toString());
            }
        }
    <div class="caption">
                             
                             性别:<dataDict:dataDictValue ddKey="1" typeCode="sex"/>
                             <br/>
                             车辆类型:<dataDict:dataDictValue ddKey="1" typeCode="car_type"/>
                             
                         </div>

    页面效果:

    题外话,这样的做法仅限jsp页面,如果你的数据是由JS render出来的话(比如jqgrid啊等等),那就可以写一个js类对象,每次传入code和key调用ajax从缓存中读取即可。


  • 相关阅读:
    [置顶] java 通过classloader加载类再通过classforname实例化
    Linux内核源代码解析——用户发送数据包的起源之sendto
    POJ 2774 Long Long Message&&HDU 1403 Longest Common Substring&&COJ 1203
    add-two-numbers-ii
    【转载】React初学者入门须知
    【Todo】【转载】ES6的学习记录
    【转载】Java中如何写一段内存泄露的程序 & ThreadLocal 介绍和使用
    【Todo】深入理解Javascript系列
    【转载】什么是优秀技术团队
    【转载】React入门-Todolist制作学习
  • 原文地址:https://www.cnblogs.com/leechenxiang/p/6115719.html
Copyright © 2020-2023  润新知