2.3.4 修改值 (出現(xiàn)錯(cuò)誤)//程序中,基于SpringBoot框架自動配置的redisTemplate,操作redis緩存,存在問題//場景:對班級人數(shù)進(jìn)行增減操作,比如將班級人數(shù),增加10log.info("------ 基于SpringBoot框架自動配置的redisTemplate 操作數(shù)據(jù) ------");redisTemplate.opsForValue().increment("student_num",10);//直接報(bào)錯(cuò),會報(bào)500異常: redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range//原因,通過系統(tǒng)默認(rèn)的 redisTemplate,存放key和value值時(shí),會自動使用Object類的序列化和反序列化,導(dǎo)致redis中真實(shí)存放的數(shù)據(jù)不是原始值,而是序列化后的值數(shù)據(jù)結(jié)果:

文章插圖
2.4 自定義redisTemplate2.4.1 fastjson 依賴<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version></dependency>2.4.2 自定義redisTemplate 配置類//Redis自定義配置類,實(shí)現(xiàn)一個(gè)自定義序列化方式的 redisTemplate,提緩緩掉默認(rèn)自動配置的 redisTemplate,實(shí)現(xiàn)String類型任意類型的value@Configurationpublic class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 自定義redisTemplate的模板對象 RedisTemplate<String, Object> template = new RedisTemplate<>(); // 設(shè)置連接工廠 template.setConnectionFactory(redisConnectionFactory); //由于要通過程序操作遠(yuǎn)程的redis數(shù)據(jù)庫,必須支持序列化,才可以讓程序中的數(shù)據(jù),在網(wǎng)絡(luò)中傳輸 //定義String類型的序列化方式 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // 定義fastjson序列化方式,可以序列化任何對象 FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); // 需改為新的序列化方式 template.setKeySerializer(stringRedisSerializer); template.setValueSerializer(fastJsonRedisSerializer); template.setHashKeySerializer(stringRedisSerializer); template.setHashValueSerializer(fastJsonRedisSerializer); // 初始化為新的模板 template.afterPropertiesSet(); return template; }}2.4.3 使用自定義redisTemplate 重新操作數(shù)據(jù)//自動裝配自定義 redisTemplate@Autowiredprivate RedisTemplate<String,Object> redisTemplate;//其他代碼不變操作結(jié)果:

文章插圖
2.5 自定義redisUtils工具類2.5.1 自定義redisUtils工具類--->RedisUtil 工具類
2.5.2 使用自定義redisTemplate和redisUtils工具類@GetMapping("/testRedisUtils")public String testSpringBootRedisUtils(){ //基于自定義的redisTemplate 和 RedisUtils 工具類,操作redis緩存 //程序中,添加數(shù)據(jù)據(jù)到redis log.info("------ 基于自定義的redisTemplate 和 RedisUtils 工具類 添加數(shù)據(jù) ------"); redisUtils.set("kh96_class_name_utils","KGC_KH96"); redisUtils.set("student_num_utils",19); //程序中,從redis獲取數(shù)據(jù) log.info("------ 基于自定義的redisTemplate 和 RedisUtils 工具類 獲取數(shù)據(jù) ------"); log.info("****** 根據(jù) 班級的key:{},獲取班級名稱:{} ******","kh96_class_name_utils",redisUtils.get("kh96_class_name_utils")); log.info("****** 根據(jù) 班級的key:{},獲取班級人數(shù):{} ******","student_num_utils",redisUtils.get("student_num_utils")); //程序中,基于SpringBoot框架自動配置的redisTemplate,操作redis緩存 //場景:對班級人數(shù)進(jìn)行增減操作,比如姜班級人數(shù),增加10 log.info("------ 基于自定義的redisTemplate 和 RedisUtils 工具類 操作數(shù)據(jù) ------"); redisUtils.incr("student_num_utils",10); return "工具類 RedisUtils 操作 redis 成功!";}
經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀
- 2023年農(nóng)歷二月十七是黃道吉日嗎
- 五 SpringBoot - Java8 新特性
- 2024年九月十七出生董姓女孩名字生辰八字五行查詢
- 2024年九月十七出生蔣姓女孩名字生辰八字五行查詢
- 2024年九月十七出生曾姓女孩名字生辰八字五行查詢
- 2024年九月十七出生丁姓女孩名字生辰八字五行查詢
- 2024年九月十七出生黎姓女孩名字生辰八字五行查詢
- 王者榮耀七周年慶時(shí)間是什么時(shí)候
- 四 SpringBoot - 整合Mybatis,逆向工程,JPA
- 七殺格女命和劫財(cái)格女命 朋友相處要細(xì)致
