日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:82日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
水蜜桃久久夜色精品一区| 麻豆精品av| 欧洲av不卡| 欧美少妇精品| 亚洲成a人片| av在线日韩| 另类小说一区二区三区| 精品99在线| 在线精品亚洲欧美日韩国产| 91tv亚洲精品香蕉国产一区| 久久一区二区中文字幕| 日韩中文字幕区一区有砖一区| 亚洲影院天堂中文av色| 国产日韩欧美一区二区三区在线观看| 国产精品xxx| 蜜桃精品在线| 只有精品亚洲| 久久精品国产一区二区| 亚洲香蕉网站| 欧美片网站免费| 日韩欧美一区二区三区在线观看| 日韩中文视频| 亚洲精品乱码久久久久久蜜桃麻豆| 国产欧美一区二区精品久久久| av免费不卡国产观看| 午夜一区在线| av资源中文在线天堂| 女主播福利一区| 国产精品亚洲综合在线观看| 久久国产影院| 国产精品sm| 模特精品在线| 国产精品毛片久久| 日韩三级一区| 蜜桃国内精品久久久久软件9| 国产精品最新| 激情久久五月| 九九99久久精品在免费线bt| 狠狠爱www人成狠狠爱综合网| 精品精品国产三级a∨在线| 亚州av日韩av| 91精品国产乱码久久久久久久| 午夜精品影视国产一区在线麻豆| 国产伦久视频在线观看| 国产精品99久久免费| 在线免费观看亚洲| 日韩精品一区二区三区免费观影 | 欧美在线网站| 国产高清不卡| 精品精品99| 国产精东传媒成人av电影| 亚洲欧洲免费| 免播放器亚洲一区| 久久成人国产| 老鸭窝毛片一区二区三区| 久久伦理在线| 欧美亚洲国产一区| 亚洲a在线视频| 日韩中文影院| 欧美aa在线视频| 久久精品五月| 成人在线免费观看91| 成人亚洲精品| 免费高潮视频95在线观看网站| 国产一区二区三区国产精品| 精品日韩一区| 国产一区二区久久久久| 精品国产美女a久久9999| 久久久久久亚洲精品美女| 免费亚洲婷婷| 成人日韩在线观看| 在线亚洲欧美| 亚洲精品观看| 你懂的国产精品| 最新中文字幕在线播放 | 日韩a一区二区| 国产尤物精品| 日本a级不卡| 国产不卡一区| 亚洲二区在线| 一区二区三区网站| 国产精品亚洲片在线播放| 美女毛片一区二区三区四区最新中文字幕亚洲| 日韩极品在线观看| 精品国产乱码久久久| 久久久久久久久99精品大| 久久美女精品| 中文字幕日本一区二区| 欧美国产专区| 久久av一区二区三区| 国产精品久久久久77777丨| 国产一二在线播放| 五月亚洲婷婷 | 日韩一区二区免费看| 欧美片第1页综合| 亚洲播播91| 日韩欧美激情电影| 在线观看精品| 午夜亚洲福利| 欧美激情另类| 日韩黄色av| 日韩精品免费一区二区在线观看| 日本一区中文字幕| 激情欧美日韩一区| 久久中文字幕一区二区三区| 91精品蜜臀一区二区三区在线| 日韩国产91| 最新亚洲激情| 亚洲电影有码| 色婷婷色综合| 国产乱人伦精品一区| 视频一区二区不卡| 亚洲视频综合| 久久精品国产在热久久| 日韩二区三区在线观看| 亚洲一区中文| 快播电影网址老女人久久| 精品一区二区三区视频在线播放 | 岛国av在线播放| 国产精品多人| 欧美天堂一区| 久久国产视频网| 日韩精品国产精品| 亚洲激情社区| 蜜桃一区二区三区| 久久高清免费| 久久国产小视频| 亚洲福利国产| 在线国产一区二区| 模特精品在线| 亚洲五月综合| 亚洲人成高清| 久久精品99国产国产精| 欧美日一区二区在线观看| 日韩精品中文字幕一区二区| 日韩精品1区2区3区| 久久国内精品视频| 欧美好骚综合网| 丁香婷婷久久| 日韩欧美一区二区三区免费观看| 久久蜜桃精品| 日韩视频二区| 日韩激情一区二区| 国产福利亚洲| 韩国三级一区| 国产婷婷精品| 国产欧美午夜| 日韩精品一卡| 免费成人性网站| 国产欧美日韩视频在线| 日韩在线二区| 免费观看日韩电影| 国产欧美一区二区三区国产幕精品 | 国产精品白丝久久av网站| 黄色在线网站噜噜噜| 亚洲一区国产| 国产精品porn| 在线成人动漫av| 蜜臀精品一区二区三区在线观看| 国产精品伊人| 在线综合亚洲| 久久精品日韩欧美| 成人av三级| 日韩久久99| 亚洲精品一区二区妖精| 国产免费播放一区二区| 五月天久久久| 精品在线网站观看| 久久亚洲二区| 久久精品国语| 美女久久99| 日韩激情网站| 亚洲在线免费| 97在线精品| 国产乱子精品一区二区在线观看 | 亚洲午夜在线| 国产极品嫩模在线观看91精品| 欧美综合国产| 激情丁香综合| av日韩中文| 国产一区调教| 国产精品777777在线播放| 亚洲乱码视频| 国产视频欧美| 欧美日韩色图| 毛片在线网站| 四虎国产精品免费观看| 国产日韩欧美一区二区三区| 蜜桃久久久久久| 先锋影音国产一区| 欧美综合另类| 亚洲va在线| 久久国产精品成人免费观看的软件| 欧美91在线|欧美| 国产精品日本一区二区三区在线 | 黄色成人精品网站| 999视频精品| 欧美福利专区| 欧美福利一区| 国产精品嫩草99av在线|