随着项目访问量的并发,对数据库操作越来越多,为了优化系统,将原数据库字典表提到了JVM内存里,但是随着开始着手集群后,弊端就出来了!最近想着将字典数据放到redis里,并且能够尽量实现多场景便捷读取。

本文主要基于以下几点去设计:

1、数据归类,最好能像数据库中表结构一样归类

2、能够边界的查询出某个字典表LIST

3、能够便捷的根据字典表代码查询出某个字典项数据。

基于以上三点,我们想要的存储结构如下:

字典项:

数据:

下面就上实例代码:

public class Test {public static void main(String[] args) {//连接本地的 Redis 服务Jedis jedis = new Jedis("localhost");System.out.println("连接成功");//查看服务是否运行System.out.println("服务正在运行: "+jedis.ping());jedis.hset("dict:gx_yy_role","5","{\"name\":\"aaaa\"}");List<String> a = jedis.hvals("dict:gx_yy_role");System.out.println("服务正在运行: "+a.toString());}
}

注:这边dict是数据,gx_yy_role是表明,中间以:隔开,主要是为了分组。这分组方式是redis一个历史问题吧!主要是当时不支持hash,所以采用:去区分,咱们利用一下!

下面“5”是字典代码,另外一个是JSON格式的字符串!

1、写入方法:用hset方法。

2、读取list列表采用hvals方法

3、根据字典代码,读取某一项字典数据,采用hget方法

我们也可以用spring的

org.springframework.data.redis.core.RedisTemplate接口去写入读取数据:
package cn.**.**.**.util;import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;import java.util.Map;/*** @author <a href="mailto:934804229@qq.com">mailto:934804229@qq.com</a>* @version 2019/7/19 14:46* @description redis中字典表数据封装*/
public class DictRedisUtils {org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(RedisUtils.class);@AutowiredRedisUtils redisUtils;private RedisTemplate<String, Object> redisTemplate;public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;}//数据类型 字典private final static String TYPE = "dict";/*** @description 存储单个字典项* @param* @return* @version 2.0, 2019/7/19 15:09* @author <a href="mailto:934804229@qq.com">mailto:934804229@qq.com</a>*/public Boolean hset(String tableName,String key,Object value){if (StringUtils.isBlank(tableName) || StringUtils.isBlank(key) || value == null){return false;}String fKey = TYPE+":"+tableName;try {redisTemplate.opsForHash().put(fKey, key, value);}catch (Exception e){e.printStackTrace();return false;}return true;};/*** @description 批量保存字典信息* @param* @return* @version 2.0, 2019/7/19 15:26* @author <a href="mailto:934804229@qq.com">mailto:934804229@qq.com</a>*/public Boolean hsets(String tableName,Map value){if (StringUtils.isBlank(tableName) || value == null || value.size() < 1){return false;}String fKey = TYPE+":"+tableName;try {redisTemplate.opsForHash().putAll(fKey, value);}catch (Exception e){e.printStackTrace();return false;}return true;};/*** @description 查询单个字典项* @param* @return* @version 2.0, 2019/7/19 15:31* @author <a href="mailto:934804229@qq.com">mailto:934804229@qq.com</a>*/public Object hget (String tableName, String key){if (StringUtils.isBlank(tableName) || StringUtils.isBlank(key)){return "";}String fKey = TYPE+":"+tableName;try {return redisTemplate.opsForHash().get(fKey, key);}catch (Exception e){e.printStackTrace();return "";}}/*** @description 查询字典表里所有字典项* @param* @return* @version 2.0, 2019/7/19 15:37* @author <a href="mailto:934804229@qq.com">mailto:934804229@qq.com</a>*/public Object hget (String tableName){if (StringUtils.isBlank(tableName)){return "";}String fKey = TYPE+":"+tableName;try {return redisTemplate.opsForHash().values(fKey);}catch (Exception e){e.printStackTrace();return "";}}
}

上面是做的简单的读写,还有很多功能,如果需要可以去完善!

redis初始化存储数据库字典表数据设计方案相关推荐

  1. oracle数据库迁移部分表,oracle 数据库之间 表数据的 迁移

    主要是 需要将 正式环境的数据库 和测试环境的数据库的 表 数据同步一下,方便测试. 这样的效果, 可以使用 数据库的 备份 , exp imp 等其他的方式, 可是这样的方式, 需要 在 电脑里面 ...

  2. 清空数据库所有表数据

    -------清空数据库所有表数据 exec sp_MSforeachtable "truncate table ?" ----查询数据库所有表名 select [name] fr ...

  3. 不同数据库之间表数据的copy及CPY 0012错误的解决办法

    刚做了一个不同数据库之间表数据的copy,使用的是oracle数据库,使用如下语句: copy from ime_db_hgjs/ime_db_hgjs@IMENEWDB to IMEYDGGLM14 ...

  4. oracle两个表数据比较,oracle数据库两表数据比较

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

  5. SQL达梦数据库复制表数据和表结构[当前模式下]

    达梦数据库复制表数据和表结构sql: 语法:create table 新表表名 as select * from 老表表名 示例: create table "SZFMIMP".& ...

  6. 汉语字典数据表 mysql_mysql数据库字典表

    1. INFORMATION_SCHEMA COLUMNS表 COLUMNS表给出了表中的列信息 查询该表的信息可以用 select * from INFORMATION_SCHEMA.COLUMNS ...

  7. 数据库单表数据过亿_我也能写数据库 —— 单表查询

    前言 说不定期更新,就不定期更新:). 在翻译关系代数这篇文档的时候,总有一种惴惴不安的感觉伴随着我,其实还是对之前概览的一知半解,而DEMO项目Calcite-example-CSV为了介绍特性,添 ...

  8. 面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么?

    以下文章来源方志朋的博客,回复"666"获面试宝典 最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,导致数据增长过快,磁盘占用多. 为了节约成本,定期进行数 ...

  9. vba二维数组初始化_将工作表数据写入VBA数组

    大家好,最近推出的内容是"VBA信息获取与处理"中的部分内容,这套教程面向中高级人员,涉及范围更广,实用性更强,现在的内容是第四个专题"EXCEL工作表数据的读取.回填和 ...

最新文章

  1. Hibernate的increment主键生成机制带来的问题
  2. 正交频分复用(OFDM)初步(原理)
  3. 蓝牙L2CAP剖析(二)
  4. vaniglia 源码学习 (六)
  5. 在命令行上操作JAR,WAR和EAR
  6. python下载文件损坏_pythonw.exe停止工作,无法运行IDLE或任何.py文件 - python
  7. python_集合(set)
  8. Elasticsearch在后台启动
  9. android http请求缓存,android 缓存http请求数据
  10. 下列不属于计算机网络特点的是自主性,计算机网络技术B卷
  11. mysql怎么开启事务日志_mysql中操作事务时要注意的事项
  12. Unity 制作一个网格地图生成组件
  13. 科研人员论文投稿邮箱选择的问题
  14. linux重装声卡驱动,linux声卡驱动重装
  15. 用坚果云同步mysql_使用技巧 | 什么?坚果云还可以同步这些App?
  16. Premiere Pro之视频升格降格(六)
  17. Css基本样式————链接
  18. CAPM与多因子定价模型
  19. Ubuntu安装企业微信解决中文字体乱码的问题
  20. 安全组设置IP段 -- 示列

热门文章

  1. MATLAB入门教程(6):修改矩阵中的值
  2. MySQL存储过程从精通到入门
  3. 浅谈富集分析的Pvalue
  4. vue动态绑定class的几种方法
  5. elasticsearch优化的点点滴滴
  6. 计蒜客:迷宫(二)---bfs
  7. 【最新】将Excel通讯录批量导入Iphone
  8. 美团0.99充10元话费,秒到账,不实名不绑卡,超简单!
  9. 无线桥接dhcp服务器怎么设置,华为路由器怎么设置桥接(2)
  10. 福利 | 520,感谢30万小伙伴的关注和同行