国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

SpringBoot+Redis實現數據字典的方法

瀏覽:9日期:2023-04-17 09:33:40

前言

我們在日常的開發過程中針對一些字段采用整型的方式去代替某些具體的含義,比如性別0代表男,1代表女。如果只是一些不會變更的轉譯我們可以采用常量或者枚舉類的方式來實現,但是事實上我們也會遇到那種可能需要變更的,顯然這種場景下使用枚舉類這種方式是不合理的,那么如何動態地去進行轉譯呢?

正文

數據字典

數據字典(Data dictionary)是一種用戶可以訪問的記錄數據庫和應用程序元數據的目錄。主動數據字典是指在對數據庫或應用程序結構進行修改時,其內容可以由DBMS自動更新的數據字典。被動數據字典是指修改時必須手工更新其內容的數據字典。 我們通常會結合數據庫來實現數據字典,但事實上數據字典經常會被使用到,如果頻繁地去訪問數據庫,將會對數據庫造成性能壓力,事實上我們經常會采用Redis對數據字典進行緩存來提升系統性能。

使用Redis的優勢:

1.絕大數的請求操作都是純粹的內存操作。2.采用了單線模式,避免了不必要的上下文切換和競爭條件這里的單線程指的是網絡請求模塊只使用了一個線程(所以不必考慮并發安全性),即一個請求處理所有網絡請求,其他模塊仍使用了多個線程。3.采用了動態字符串(SDS),對于字符串會預留一定的空間,避免了字符串在做拼接和截取引起內存重新分配導致性能的損耗。

SpringBoot+Redis實現數據字典

依賴

<!--redis--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version></dependency><!--lombok--><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <optional>true</optional></dependency>

application.properties:配置類

#redisspring.redis.host=127.0.0.1spring.redis.port=6379

字典表:SYS_DICT

SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for SYS_DICT-- ----------------------------DROP TABLE IF EXISTS `SYS_DICT`;CREATE TABLE `SYS_DICT` ( `code` varchar(36) NOT NULL COMMENT ’主鍵’, `type_code` varchar(36) DEFAULT NULL COMMENT ’類型code’, `name` varchar(50) DEFAULT NULL COMMENT ’展示值’, `value` int(20) DEFAULT NULL COMMENT ’使用值’, `fixed` int(2) DEFAULT NULL COMMENT ’default 0不固定,固定的話用1’, `creater` varchar(20) DEFAULT NULL COMMENT ’新建人’, `create_time` datetime DEFAULT NULL COMMENT ’新建時間’, `updater` varchar(20) DEFAULT NULL COMMENT ’編輯人’, `update_time` datetime DEFAULT NULL COMMENT ’編輯時間’, PRIMARY KEY (`code`), KEY `sys_type` (`type_code`), CONSTRAINT `sys_type` FOREIGN KEY (`type_code`) REFERENCES `SYS_DICT_TYPE` (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of SYS_DICT-- ----------------------------INSERT INTO `SYS_DICT` VALUES (’182d4db6-aa50-11ea-aa1b-00163e08c9ed’, ’9ed92c7e-aa4f-11ea-aa1b-00163e08c9ed’, ’男’, ’0’, ’1’, null, null, null, null);INSERT INTO `SYS_DICT` VALUES (’222cf983-aa50-11ea-aa1b-00163e08c9ed’, ’9ed92c7e-aa4f-11ea-aa1b-00163e08c9ed’, ’女’, ’1’, ’1’, null, null, null, null);

字典類型表SYS_DICT_TYPE

SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for SYS_DICT_TYPE-- ----------------------------DROP TABLE IF EXISTS `SYS_DICT_TYPE`;CREATE TABLE `SYS_DICT_TYPE` ( `code` varchar(36) NOT NULL, `name` varchar(50) DEFAULT NULL COMMENT ’用于展示’, `value` varchar(50) DEFAULT NULL COMMENT ’用于前段(建立唯一索引)’, `creater` varchar(20) DEFAULT NULL COMMENT ’新建人’, `create_time` datetime DEFAULT NULL COMMENT ’新建時間’, `updater` varchar(20) DEFAULT NULL COMMENT ’編輯人’, `updater_time` datetime DEFAULT NULL COMMENT ’編輯時間’, PRIMARY KEY (`code`), UNIQUE KEY `key_value` (`value`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of SYS_DICT_TYPE-- ----------------------------INSERT INTO `SYS_DICT_TYPE` VALUES (’9ed92c7e-aa4f-11ea-aa1b-00163e08c9ed’, ’性別’, ’sex’, null, null, null, null);

RedisConfigurtion:Redis配置類,解決Redis數據同步時字符串格式問題

@Configurationpublic class RedisConfigurtion { @Autowired private RedisTemplate redisTemplate; @Bean public RedisTemplate<String, Object> stringSerializerRedisTemplate() { RedisSerializer<String> stringSerializer = new StringRedisSerializer(); redisTemplate.setKeySerializer(stringSerializer); redisTemplate.setValueSerializer(stringSerializer); redisTemplate.setHashKeySerializer(stringSerializer); redisTemplate.setHashValueSerializer(stringSerializer); return redisTemplate; }}

SpringUtil:用于加載Spring容器

@Componentpublic class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if(SpringUtil.applicationContext == null){ SpringUtil.applicationContext = applicationContext; } } //獲取applicationContext public static ApplicationContext getApplicationContext() { return applicationContext; } //通過name獲取 Bean. public static Object getBean(String name){ return getApplicationContext().getBean(name); } //通過class獲取Bean. public static <T> T getBean(Class<T> clazz){ return getApplicationContext().getBean(clazz); } //通過name,以及Clazz返回指定的Bean public static <T> T getBean(String name,Class<T> clazz){ return getApplicationContext().getBean(name, clazz); }}

RedisDistUtil:Spring容器不允許普通Pojo調用Service,所以采用以下方式手動通過Spring容器去加載Bean.

public class RedisDistUtil { private static ApplicationContext context; /** * 轉化碼值 * @param distname * @param value * @return * @throws Exception */ public static String transformStr(String distname, int value) { ApplicationContext context = SpringUtil.getApplicationContext(); ISysDictService iSysDictService =context.getBean(ISysDictService.class); return iSysDictService.transformStr(distname,value); }}

SysDictService

transformStr:從Redis中獲取字典值。 refreshCache:用于將數據庫數據字典表數據同步到Redis中。

@Transactional@Service@Slf4jpublic class SysDictService implements ISysDictService { @Autowired SysDictPojoMapper sysDictPojoMapper; @Autowired RedisTemplate redisTemplate; /** * 轉化碼值 * * @param distname * @param value * @return * @throws Exception */ @Override public String transformStr(String distname, int value) { return redisTemplate.opsForValue().get(distname + '_' + value) != null ?redisTemplate.opsForValue().get(distname + '_' + value).toString() : String.valueOf(value); } /** * 刷新緩存 */ @Override public void refreshCache() { log.info('start 刷新碼表緩存'); List<SysDictPojo> sysDictPojoList = sysDictPojoMapper.getall(); long startTime = System.currentTimeMillis(); for (SysDictPojo sysDictPojo : sysDictPojoList) { redisTemplate.opsForValue().set(sysDictPojo.getTypeCodeValue() + '_' + sysDictPojo.getValue(), sysDictPojo.getName()); } long endTime = System.currentTimeMillis(); log.info('end 刷新碼表緩存,總計:' + sysDictPojoList.size() + '條,用時:' + (endTime - startTime) + '毫秒'); }}

SysDictPojo:數據字典的實體類

@Setter@Getter@ToStringpublic class SysDictPojo implements Serializable { private static final long serialVersionUID = 7845051152365224116L; private String code; private String typeCode; private String typeCodeValue; private String name; private Integer value; private Integer fixed; private String creater; private Date createTime; private String updater; private Date updateTime;}

getall:查詢數據庫的所有數據字典值

<select resultType='com.luo.dao.entity.SysDictPojo'> select t1.name, t1.value, t2.value typeCodeValue from SYS_DICT t1 left join SYS_DICT_TYPE t2 on t2.code =t1.type_code</select>

驗證

UserPojoRes :在get方法里進行數據字典值的替換

@Setter@Getter@ToStringpublic class UserPojoRes implements Serializable { private static final long serialVersionUID = -2145503717390503506L; /** * 主鍵 */ private String id; /** * 姓名 */ private String name; /** * 性別 */ private int sex; /** * 性別展示 */ private String sexStr; /** * 消息 */ private String msg; public String getSexStr() { return RedisDistUtils.transformStr('sex',this.sex); }}

訪問模擬接口,根據id查詢用戶信息:

SpringBoot+Redis實現數據字典的方法

到此這篇關于SpringBoot+Redis實現數據字典的方法的文章就介紹到這了,更多相關SpringBoot+Redis數據字典內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 欧美精品一区二区三区视频 | 草草影院永久在线观看 | 国产午夜亚洲精品第一区 | 欧美另类在线观看 | 一级毛片在线免费播放 | 91福利国产在线观看香蕉 | 亚洲国产精品一区二区三区在线观看 | 亚洲欧美日韩精品久久亚洲区色播 | 亚洲最新网址 | 日韩三级欧美 | 末满18以下勿进色禁网站 | 日本在线观看网址 | 国产一区二区三区在线视频 | 亚洲国产品综合人成综合网站 | 高清欧美不卡一区二区三区 | 欧美视频一二三区 | 日韩三级观看 | 午夜dj视频完整社区 | 欧美一级毛片一级 | 欧美成人 综合网播九公社 欧美成人26uuu欧美毛片 | 国产精品高清在线 | 日韩欧美在线观看视频一区二区 | 欧美国产三级 | 狠狠se| 亚洲无线一二三区2021 | 99精品免费视频 | 亚洲欧美日韩综合在线一区二区三区 | 九九黄色影院 | 日本加勒比一区 | 性刺激欧美三级在线现看中文 | 久草网在线视频 | 大量愉拍情侣在线视频 | 国产在线一区二区三区四区 | 久久精品视频一区二区三区 | 男人和女人的做刺激性视频 | a国产成人免费视频 | 亚洲午夜影视 | 亚洲成人一级 | 欧美一级成人一区二区三区 | 最近手机中文字幕1 | 国产精品久久久久久福利漫画 |