成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot+Redis實現(xiàn)數(shù)據(jù)字典的方法

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

前言

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

正文

數(shù)據(jù)字典

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

使用Redis的優(yōu)勢:

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

SpringBoot+Redis實現(xiàn)數(shù)據(jù)字典

依賴

<!--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數(shù)據(jù)同步時字符串格式問題

@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調(diào)用Service,所以采用以下方式手動通過Spring容器去加載Bean.

public class RedisDistUtil { private static ApplicationContext context; /** * 轉(zhuǎn)化碼值 * @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:用于將數(shù)據(jù)庫數(shù)據(jù)字典表數(shù)據(jù)同步到Redis中。

@Transactional@Service@Slf4jpublic class SysDictService implements ISysDictService { @Autowired SysDictPojoMapper sysDictPojoMapper; @Autowired RedisTemplate redisTemplate; /** * 轉(zhuǎn)化碼值 * * @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:數(shù)據(jù)字典的實體類

@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:查詢數(shù)據(jù)庫的所有數(shù)據(jù)字典值

<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方法里進行數(shù)據(jù)字典值的替換

@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); }}

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

SpringBoot+Redis實現(xiàn)數(shù)據(jù)字典的方法

到此這篇關(guān)于SpringBoot+Redis實現(xiàn)數(shù)據(jù)字典的方法的文章就介紹到這了,更多相關(guān)SpringBoot+Redis數(shù)據(jù)字典內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Spring
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美日韩国产免费| 国产精品视频九色porn| 2019国产精品| 国产乱码精品一区二区三区五月婷 | 国产一区美女在线| 欧美在线观看18| 日韩在线一区二区| 一区二区三区成人精品| 亚洲欧美在线观看| 欧美伊人久久| 久久久亚洲精品石原莉奈| 成人天堂资源www在线| 欧美一级欧美三级| 国产一区二区精品在线观看| 欧美人妇做爰xxxⅹ性高电影| 免费在线观看不卡| 色婷婷久久久久swag精品| 亚洲bt欧美bt精品777| 国产伦精品一区二区三区高清版| 亚洲免费三区一区二区| 国产精品www994| 久久蜜桃av一区二区天堂 | 日韩欧美黄色影院| 国产精品一级黄| 日韩欧美激情在线| 成人毛片老司机大片| 精品国产3级a| 91亚洲永久精品| 久久品道一品道久久精品| 91在线高清观看| 日本一区二区免费在线观看视频| 欧美阿v一级看视频| 中文文精品字幕一区二区| 欧美日韩成人| 一区二区中文字幕在线| 亚洲国产欧美不卡在线观看| 亚洲欧洲www| 亚洲精品影院| 亚洲综合免费观看高清完整版在线| 国产精品美女xx| 亚洲va欧美va人人爽午夜| 色婷婷综合在线| 韩国女主播一区二区三区| 日韩一区二区免费在线观看| 国产成人日日夜夜| 精品国产凹凸成av人网站| 欧美福利一区| 中文字幕在线一区二区三区| 在线亚洲观看| 日韩精品一二三| 欧美理论电影在线| 成人少妇影院yyyy| 国产精品久久久久久亚洲毛片| 亚洲精品日韩精品| 日韩精品1区2区3区| 在线播放日韩导航| 91视频你懂的| 亚洲美女免费在线| 色又黄又爽网站www久久| 国产一区二区影院| 国产三级欧美三级日产三级99| 亚洲国产日韩欧美| 日韩影院免费视频| 日韩精品一区二区三区蜜臀| 欧美一区91| 亚洲一区二区在线视频| 色欧美日韩亚洲| 国产精品一区2区| 欧美经典一区二区| 午夜在线播放视频欧美| 国产一区二区导航在线播放| 国产亲近乱来精品视频| 国产欧美丝祙| 国产一区二区视频在线| 国产欧美精品一区二区三区四区| 国产一区二区三区黄| 经典一区二区三区| 国产欧美一区二区精品忘忧草| 久久高清国产| 国产999精品久久| 日韩美女视频一区二区| 一本大道av一区二区在线播放| 国产精品一区二区久久精品爱涩| 最新不卡av在线| 欧美性猛片aaaaaaa做受| 99这里只有久久精品视频| 亚洲精品国产一区二区精华液| 欧美日韩国产一级片| 欧美国产免费| 调教+趴+乳夹+国产+精品| 欧美一区二区福利在线| 影院欧美亚洲| 久久精品国产一区二区三区免费看 | 高清在线不卡av| 综合激情成人伊人| 欧美片网站yy| 亚洲国内在线| 国产成人免费视频网站高清观看视频| 欧美激情一区在线| 欧美色欧美亚洲另类二区| 欧美色一级片| 精品一区二区影视| 中文字幕一区二区三区在线不卡| 精品视频免费看| 亚洲日产国产精品| 国产精品一区二区三区四区| 亚洲欧美日韩一区二区三区在线观看| 精品视频免费看| 亚洲一级特黄| 蜜臀精品一区二区三区在线观看 | 久久精品二区亚洲w码| 国产精品区一区二区三区| 欧美性xxxxxx少妇| 亚洲高清毛片| 成人精品视频一区二区三区尤物| 亚洲电影第三页| 久久精品欧美一区二区三区不卡 | 日韩在线一二三区| 日本一区二区久久| 欧美日韩精品久久久| 亚洲国产精品视频一区| 成人性视频网站| 日产国产欧美视频一区精品| 国产精品久久久久影院老司| 欧美一区二区三区日韩| 久久精品毛片| 国产精品v日韩精品v欧美精品网站| 久久www免费人成看片高清| 亚洲日本丝袜连裤袜办公室| 精品国产麻豆免费人成网站| 欧美在线观看视频一区二区| 亚洲精品乱码视频| hitomi一区二区三区精品| 麻豆传媒一区二区三区| 亚洲精品久久7777| 久久久不卡网国产精品二区| 欧美日韩二区三区| 亚洲欧美视频一区二区三区| 欧美视频在线观看| 成人午夜又粗又硬又大| 美女视频网站黄色亚洲| 亚洲一区在线视频| 国产精品久久久久三级| 欧美v日韩v国产v| 欧美喷潮久久久xxxxx| 色猫猫国产区一区二在线视频| 最新亚洲一区| 91网站视频在线观看| 国产精品久久国产三级国电话系列| 波多野结衣在线一区| 欧美aa在线视频| 香蕉成人啪国产精品视频综合网| 亚洲欧美欧美一区二区三区| 国产欧美一区视频| 精品国产一区久久| 制服丝袜一区二区三区| 欧美日韩一区不卡| 久久激情综合| 亚洲黄色成人| 国产精品豆花视频| 91麻豆免费看片| 成人免费视频免费观看| 国内精品免费在线观看| 日本免费在线视频不卡一不卡二| 狠狠色丁香婷综合久久| 日本女优在线视频一区二区| 午夜视频在线观看一区二区| 亚洲成人一区二区| 亚洲一区在线观看视频| 樱桃视频在线观看一区| 亚洲天天做日日做天天谢日日欢| 国产日韩欧美在线一区| 国产视频一区在线观看 | 久久久久久久久久久黄色| 亚洲欧美一级二级三级| 丁香亚洲综合激情啪啪综合| 国产高清不卡二三区| 国产精品一级在线| 成人黄色大片在线观看| 天天影视色香欲综合网老头| 亚洲天天做日日做天天谢日日欢 | 欧美日韩在线不卡| 噜噜噜91成人网| 亚洲精品成人少妇| 成人免费高清在线| 欧美成人欧美edvon| 欧美久久影院| 国产精品欧美极品| 亚洲一级黄色| 亚洲成人免费看| 久久久福利视频| 成人国产亚洲欧美成人综合网| 久久国产精品久久精品国产| 麻豆精品蜜桃视频网站| 日本一区二区免费在线观看视频 | 中文字幕日韩一区| 在线视频国内自拍亚洲视频| 欧美日韩在线精品一区二区三区激情| 欧美三级中文字幕在线观看| 欧美一区二区三区色|