2.3.4 修改值 (出现错误)//程序中,基于SpringBoot框架自动配置的redisTemplate,操作redis缓存,存在问题//场景:对班级人数进行增减操作,比如将班级人数,增加10log.info("------ 基于SpringBoot框架自动配置的redisTemplate 操作数据 ------");redisTemplate.opsForValue().increment("student_num",10);//直接报错,会报500异常: redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range//原因,通过系统默认的 redisTemplate,存放key和value值时,会自动使用Object类的序列化和反序列化,导致redis中真实存放的数据不是原始值,而是序列化后的值数据结果:

文章插图
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自定义配置类,实现一个自定义序列化方式的 redisTemplate,提缓缓掉默认自动配置的 redisTemplate,实现String类型任意类型的value@Configurationpublic class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 自定义redisTemplate的模板对象 RedisTemplate<String, Object> template = new RedisTemplate<>(); // 设置连接工厂 template.setConnectionFactory(redisConnectionFactory); //由于要通过程序操作远程的redis数据库,必须支持序列化,才可以让程序中的数据,在网络中传输 //定义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 重新操作数据//自动装配自定义 redisTemplate@Autowiredprivate RedisTemplate<String,Object> redisTemplate;//其他代码不变操作结果:

文章插图
2.5 自定义redisUtils工具类2.5.1 自定义redisUtils工具类--->RedisUtil 工具类
2.5.2 使用自定义redisTemplate和redisUtils工具类@GetMapping("/testRedisUtils")public String testSpringBootRedisUtils(){ //基于自定义的redisTemplate 和 RedisUtils 工具类,操作redis缓存 //程序中,添加数据据到redis log.info("------ 基于自定义的redisTemplate 和 RedisUtils 工具类 添加数据 ------"); redisUtils.set("kh96_class_name_utils","KGC_KH96"); redisUtils.set("student_num_utils",19); //程序中,从redis获取数据 log.info("------ 基于自定义的redisTemplate 和 RedisUtils 工具类 获取数据 ------"); log.info("****** 根据 班级的key:{},获取班级名称:{} ******","kh96_class_name_utils",redisUtils.get("kh96_class_name_utils")); log.info("****** 根据 班级的key:{},获取班级人数:{} ******","student_num_utils",redisUtils.get("student_num_utils")); //程序中,基于SpringBoot框架自动配置的redisTemplate,操作redis缓存 //场景:对班级人数进行增减操作,比如姜班级人数,增加10 log.info("------ 基于自定义的redisTemplate 和 RedisUtils 工具类 操作数据 ------"); redisUtils.incr("student_num_utils",10); return "工具类 RedisUtils 操作 redis 成功!";}
经验总结扩展阅读
- 2023年农历二月十七是黄道吉日吗
- 五 SpringBoot - Java8 新特性
- 2024年九月十七出生董姓女孩名字生辰八字五行查询
- 2024年九月十七出生蒋姓女孩名字生辰八字五行查询
- 2024年九月十七出生曾姓女孩名字生辰八字五行查询
- 2024年九月十七出生丁姓女孩名字生辰八字五行查询
- 2024年九月十七出生黎姓女孩名字生辰八字五行查询
- 王者荣耀七周年庆时间是什么时候
- 四 SpringBoot - 整合Mybatis,逆向工程,JPA
- 七杀格女命和劫财格女命 朋友相处要细致

 
   
   
   
   
   
   
   
   
   
   
   
  