redis初始化存储数据库字典表数据设计方案
随着项目访问量的并发,对数据库操作越来越多,为了优化系统,将原数据库字典表提到了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初始化存储数据库字典表数据设计方案相关推荐
- oracle数据库迁移部分表,oracle 数据库之间 表数据的 迁移
主要是 需要将 正式环境的数据库 和测试环境的数据库的 表 数据同步一下,方便测试. 这样的效果, 可以使用 数据库的 备份 , exp imp 等其他的方式, 可是这样的方式, 需要 在 电脑里面 ...
- 清空数据库所有表数据
-------清空数据库所有表数据 exec sp_MSforeachtable "truncate table ?" ----查询数据库所有表名 select [name] fr ...
- 不同数据库之间表数据的copy及CPY 0012错误的解决办法
刚做了一个不同数据库之间表数据的copy,使用的是oracle数据库,使用如下语句: copy from ime_db_hgjs/ime_db_hgjs@IMENEWDB to IMEYDGGLM14 ...
- oracle两个表数据比较,oracle数据库两表数据比较
1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...
- SQL达梦数据库复制表数据和表结构[当前模式下]
达梦数据库复制表数据和表结构sql: 语法:create table 新表表名 as select * from 老表表名 示例: create table "SZFMIMP".& ...
- 汉语字典数据表 mysql_mysql数据库字典表
1. INFORMATION_SCHEMA COLUMNS表 COLUMNS表给出了表中的列信息 查询该表的信息可以用 select * from INFORMATION_SCHEMA.COLUMNS ...
- 数据库单表数据过亿_我也能写数据库 —— 单表查询
前言 说不定期更新,就不定期更新:). 在翻译关系代数这篇文档的时候,总有一种惴惴不安的感觉伴随着我,其实还是对之前概览的一知半解,而DEMO项目Calcite-example-CSV为了介绍特性,添 ...
- 面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么?
以下文章来源方志朋的博客,回复"666"获面试宝典 最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,导致数据增长过快,磁盘占用多. 为了节约成本,定期进行数 ...
- vba二维数组初始化_将工作表数据写入VBA数组
大家好,最近推出的内容是"VBA信息获取与处理"中的部分内容,这套教程面向中高级人员,涉及范围更广,实用性更强,现在的内容是第四个专题"EXCEL工作表数据的读取.回填和 ...
最新文章
- Hibernate的increment主键生成机制带来的问题
- 正交频分复用(OFDM)初步(原理)
- 蓝牙L2CAP剖析(二)
- vaniglia 源码学习 (六)
- 在命令行上操作JAR,WAR和EAR
- python下载文件损坏_pythonw.exe停止工作,无法运行IDLE或任何.py文件 - python
- python_集合(set)
- Elasticsearch在后台启动
- android http请求缓存,android 缓存http请求数据
- 下列不属于计算机网络特点的是自主性,计算机网络技术B卷
- mysql怎么开启事务日志_mysql中操作事务时要注意的事项
- Unity 制作一个网格地图生成组件
- 科研人员论文投稿邮箱选择的问题
- linux重装声卡驱动,linux声卡驱动重装
- 用坚果云同步mysql_使用技巧 | 什么?坚果云还可以同步这些App?
- Premiere Pro之视频升格降格(六)
- Css基本样式————链接
- CAPM与多因子定价模型
- Ubuntu安装企业微信解决中文字体乱码的问题
- 安全组设置IP段 -- 示列