JAVA项目字典与缓存搭配使用方法解析
字典数据是什么?
这里说了字典不是软件工程中说的数据字典。
字典数据:用于动态设置某对象的属性是属于在一个可列举的数据范围内的某一类型数据,使用字典类型作为该类别属性的唯一标识
如:用户类型:学生,老师,家长,校长等
有什么作用?
字典数据由两个表组成:字典类型表 dict_type,字典类型数据表 dict_data
这个数据相当于java中的枚举类,可以被使用于前端的数据展示,下拉框数据集使用。
没有数据字典时业务操作方法:
定义学生枚举类,在代码中使用枚举类的key进行数据保存,在查询数据后,转换key对应的中文名称label标签返回给前端。
缺点:如新增用户类型,修改学生类型对应中文名称时,需要修改代码。
使用字典时业务操作方法。
后端业务数据存储的是字典类型的key值,即label标签表示学生类型对应的key值 student,
新增数据时前端通过下拉菜单获取学生类型某一个类型key进行新增,查询数据时根据字典数据表的用户类型作为下拉框查询条件选择。
优点:当key为student的数据中文名称发生改变时,不需要后端进行代码修改。
如新增用户时,设置用户的类型,下拉框的数据可以从数据库获取数据,不用前端关心数据集的内容,
在业务中使用
不使用缓存的方式使用字典数据:
业务中使用方式,返回用户列表数据,将用户类型的字典数据从数据库中查询出来,然后进行转换。
在前端查询数据时,前端查询用户类型的下拉数据集,作为条件,传类型key值作为查询条件查询数据。
与缓存搭配使用字典数据。
自己控制数据缓存。灵活性高:Ehcache,Redis等内存缓存框架进行处理。
如果是单机项目。可以使用内存缓存。
缓存的使用方式有多种:
如使用Mybatis自带的一级缓存,二级缓存。但如果使用的是不同的SqlSession进行数据查询,这不会用到一级缓存。
单机项目最好还是使用内存缓存框架,如Ehcache,用Map来存储所有字典数据。在更新字典数据后,直接整个更新缓存数据。
{ "字典类型": [ { "key": "label" } ] }
如果是分布式(虽然没实际用过):可以使用redis这种外置的非关系型数据库存储缓存数据。即一个类型一个key来存储数据。如
RedisUtils.put( "dict:type_user_type" ) RedisUtils.get( "dict:type_user_type" )
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Java语言字典序排序算法解析及代码示例
字典序法就是按照字典排序的思想逐一产生所有排列. 在数学中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法. 这种泛化主要在于定义有序完全有序集合(通常称为字母表)的元素的序列(通常称为计算机科学中的单词)的总顺序. 对于数字1.2.3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的.例如对于5个数字的排列 12354和12345,排列12345在前,排列12354在后.按照这样的规定,5个数字的所有的
-
Java压缩之LZW算法字典压缩与解压讲解
压缩过程: 前面已经写过一篇哈夫曼压缩,LZW字典压缩与哈夫曼压缩的不同之处在于不需要把编码写入文件,编码表是在读文件中生成的,首先将0-255个ASCLL码与对应的数字存入哈希表中,作为基础码表. 这里的后缀为当前 前缀+后缀 如果在码表中存在,前缀等于前缀+后缀.如果不存在,将前缀+后缀所表示的字符串写入编码表编码,同时将前缀写入压缩文件中.这里重点注意一下,一个字节所能表示的数字范围为0-255,所以我们将一个字符的编码变成两个字节写进去,分别写入它的高八位和低八位,比如256即为0000
-
Java全排列算法字典序下的下一个排列讲解
一直写过数组全排列的算法,当时接触的是使用回溯的方法,这样可以保证生成的全排列一定是按照字典序的,但是今天在做leetcode上的一道题时,问题是要你找到某个排列情况的下一个按照字典序排列的状态. 如果直接一点,大可从头开始做全排列,然后到目标状态时,在做一次即可找到要的状态,但是如果题目给的状态非常靠后,则要花费很大的代价,这样做就显得有些笨拙了. 所以做这道题的时候一直在思考如何按照字典序生成全排列. 假设此时给出的状态时5 2 4 3 1,那么下一个状态要如何确定呢?首先从人的视角来看,绝
-
java实现对map的字典序排序操作示例
本文实例讲述了java实现对map的字典序排序操作.分享给大家供大家参考,具体如下: java中对map的字典序排序,算法验证比对微信官网https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN,搜索关键字"附录1-JS-SDK使用权限签名算法" import java.util.ArrayList; import java.util.Collectio
-
Java字典生成算法讲解
在实际应用中,大家使用的密码可以说多种多样,但是无论有多少,其组成不遑是有可打印字符组成的,我们可以认为 class CreateDic{ private int BitNum; private String Str; public void SetBitNum(int num) { BitNum=num; } public void SetStr(String str) { Str=str; } public int GetBitNum(){ return BitNum; } public S
-
全排列算法-递归与字典序的实现方法(Java)
全排列算法-递归与字典序的实现方法(Java) 全排列: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列. 例如: 1 .2 .3三个元素的全排列为: {1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}. ------------------------------------------------------ 解法1(递归) 如下图:要对1.2.3.4进行
-
Trie树(字典树)的介绍及Java实现
简介 Trie树,又称为前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串. 它的主要特点如下: 根节点不包含字符,除根节点外的每一个节点都只包含一个字符. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串. 每个节点的所有子节点包含的字符都不相同. 如下是一棵典型的Trie树: Trie的来源是Retrie
-
JAVA项目字典与缓存搭配使用方法解析
字典数据是什么? 这里说了字典不是软件工程中说的数据字典. 字典数据:用于动态设置某对象的属性是属于在一个可列举的数据范围内的某一类型数据,使用字典类型作为该类别属性的唯一标识 如:用户类型:学生,老师,家长,校长等 有什么作用? 字典数据由两个表组成:字典类型表 dict_type,字典类型数据表 dict_data 这个数据相当于java中的枚举类,可以被使用于前端的数据展示,下拉框数据集使用. 没有数据字典时业务操作方法: 定义学生枚举类,在代码中使用枚举类的key进行数据保存,在查询数据
-
为Java项目添加Redis缓存的方法
Redis的安装 Redis一般有Linux和Windows两种安装方式,Windows的最高版本为3.2,Linux的最高版本为5.0,大家可以根据自己的需要添加 Linux 首先在linux下安装docker,在docker环境下安装redis5.0的镜像 docker pull redis:5.0 然后使用Docker命令启动Redis容器 docker run -p 6379:6379 --name redis \ -v /mydata/redis/data:/data \ -d red
-
Java实现简单LRU缓存机制的方法
一.什么是 LRU 算法 就是一种缓存淘汰策略. 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置.但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用. LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰. 二.LRU的使用 LRUCache cache = new LRUCache( 2 /* 缓存容量 */ ); cache.put(1,
-
记一次用IDEA打开java项目后不能运行的解决方法
有时候想运行别人的项目,但是别人的项目并非IDEA项目(甚至只有源码),当我们打开项目时候,并不能运行,我们却不知道怎么办.经过多次查找和尝试,最终终于能够运行起来了.记一下解决的方法. 这是源码打开的项目 首先,查看sdk是否设置了.可以在 File=>Project Structure=>Project里面查看并设置. 但是,设置后还是不可以运行.如下图: 设置SDK后的 我们可以发现,src跟可以正常运行的项目的src颜色不一样: 正常可运行项目 原来,是IDEA不能自动对源代码识别出来
-
Java项目实现定时任务的三种方法
目录 1 使用java.util.Timer 2 使用ScheduledExecutorService 3 使用Spring Task 总结 1 使用java.util.Timer 这种方式的定时任务主要用到两个类,Timer 和 TimerTask,使用起来比较简单.其中 Timer 负责设定 TimerTask 的起始与间隔执行时间. TimerTask是一个抽象类,new的时候实现自己的 run 方法,然后将其丢给 Timer 去执行即可. 代码示例: import java.time.L
-
Java执行cmd命令两种实现方法解析
一般java在执行CMD命令时,通常是使用Runtime.getRuntime.exec(command)来执行的,这个方法有两种细节要注意: 1.一般执行方法,代码如下,这种方法有时执行exe时会卡在那里. //一般的执行方法,有时执行exe会卡在那 stmt要执行的命令 public static void executive(String stmt) throws IOException, InterruptedException { Runtime runtime = Runtime.g
-
Java常用线程池原理及使用方法解析
一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等待工作调度,执行完任务后,线程并不会立即被销毁,而是重新处于空闲状态,等待下一次调度. 线程池的工作机制? 在线程池的编程模式中,任务提交并不是直接提交给线程,而是提交给池.线程池在拿到任务之后,就会寻找有没有空闲的线程,有则分配给空闲线程执行,暂时没有则会进入等待队列,继续等待空闲线程.如果超出最
-
Android的HTTP扩展包OkHttp中的缓存功能使用方法解析
OkHttp 可以对 HTTP 响应的内容在磁盘上进行缓存.在进行 HTTP 请求时,如果该请求的响应已经被缓存而且没有过期,OkHttp 会直接使用缓存中的响应内容,而不需要真正的发出 HTTP 请求到远程服务器.在创建缓存时需要指定一个磁盘目录和缓存的大小.在代码清单 8 中,创建出 Cache 对象之后,通过 OkHttpClient 的 setCache 进行设置.通过 Response 对象的 cacheResponse 和 networkResponse 方法可以得到缓存的响应和从实
-
Java在Excel中创建透视表方法解析
本文内容介绍通过Java程序在Excel表格中根据数据来创建透视表. 环境准备 需要使用Excel类库工具-Free Spire.XLS for Java,这里使用的是免费版,可通过官网下载Jar包并解压,手动导入lib文件夹下的Spire.Xls.jar到Java程序:或者也可以通过Maven仓库下载导入. Java代码示例 import com.spire.xls.*; public class CreatePivotTable { public static void main(Strin
-
实现 Java 本地缓存的方法解析
缓存,我相信大家对它一定不陌生,在项目中,缓存肯定是必不可少的.市面上有非常多的缓存工具,比如 Redis.Guava Cache 或者 EHcache.对于这些工具,我想大家肯定都非常熟悉,所以今天我们不聊它们,我们来聊一聊如何实现本地缓存.参考上面几种工具,要实现一个较好的本地缓存,平头哥认为要从以下三个方面开始. 1.存储集合的选择 实现本地缓存,存储容器肯定是 key/value 形式的数据结构,在 Java 中,也就是我们常用的 Map 集合.Map 中有 HashMap.Hashta
随机推荐
- mac git xcrun error active developer path 错误
- rational对象脚本命令
- Vue2几种常见开局方式详解
- Android GZip的使用-开发中网络请求的压缩实例详解
- 详解Ubuntu14.04桥接网络设置与SSH登陆
- python回溯法实现数组全排列输出实例分析
- js实现大转盘抽奖游戏实例
- Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
- 正确使用带有"g"标记的javascript正则表达式
- scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
- spring(java,js,html) 截图上传图片实例详解
- mysql5.7.19 解压版安装教程详解(附送纯净破解中文版SQLYog)
- MySQL prepare语句的SQL语法
- PHP基于单例模式实现的数据库操作基类
- javascripit实现密码强度检测代码分享
- PHP实现上传多图即时显示与即时删除的方法
- 跟我学Laravel之请求(Request)的生命周期
- js进行表单验证实例分析
- jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
- 详解Java向服务端发送文件的方法