SpringBoot整合Redis之编写RedisConfig

作者:小目标青年 时间:2023-08-29 02:35:57 

编写RedisConfig首先我们要明白RedisConfig中需要包含什么,首先看看我们直接使用RedisTemplate的问题,我们就知道RedisConfig要包含什么了,我们在RedisConfig需要规定好根据不同的查询生成的key,key和value的序列化和反序列化

我们在RedisConfig中配置的自定义方法,最终通过注解引用的就是我们自定义的方法

RedisConfig.java   :     

对redis提供的两个Template的序列化配置

/**
* @Author: JCccc
* @CreateTime: 2018-09-11
* @Description:
*/
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

@Configuration
@EnableCaching
public class RedisConfig {
          @Bean
       public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
           RedisCacheConfiguration cacheConfiguration =
                   defaultCacheConfig()
                           .disableCachingNullValues()
                           .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer(Object.class)));
           return RedisCacheManager.builder(connectionFactory).cacheDefaults(cacheConfiguration).build();

//            RedisCacheManager rcm=RedisCacheManager.create(connectionFactory);
//
//            return rcm;

}

@Bean
       public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
           RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
           redisTemplate.setConnectionFactory(factory);
           Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
           ObjectMapper om = new ObjectMapper();
           om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
           om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
           jackson2JsonRedisSerializer.setObjectMapper(om);
           //序列化设置 ,这样为了存储操作对象时正常显示的数据,也能正常存储和获取
           redisTemplate.setKeySerializer(new StringRedisSerializer());
           redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
           redisTemplate.setHashKeySerializer(new StringRedisSerializer());
           redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
           return redisTemplate;
       }
   @Bean
   public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
       StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
       stringRedisTemplate.setConnectionFactory(factory);
       return stringRedisTemplate;
   }

}

补充

redisconfig配置与使用

配置类:

@Configuration   // 定义一个配置类
public class RedisConfig {
   //object object

/*
   * 用于redisApi
   * */
   @Bean
   public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
       RedisTemplate<Object, Object> template = new RedisTemplate();
       template.setConnectionFactory(redisConnectionFactory);
       // 使用JSON格式序列化对象,对缓存数据key和value进行转换
       Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
       // 解决查询缓存转换异常的问题
       ObjectMapper om = new ObjectMapper();
       om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
       om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
       jacksonSeial.setObjectMapper(om);

// 设置RedisTemplate模板API的序列化方式为JSON
       template.setDefaultSerializer(jacksonSeial);
       return template;
   }
}

使用方式:

1. 业务类中进行注入:

@Autowired
RedisTemplate redisTemplate;

2. 使用redisTemplate的内置方法:

2.1 获取redis中的数据

Object object = redisTemplate.opsForValue().get("course_" + id);

2.2 插入数据

redisTemplate.opsForValue().set("course_" + id, course, 1, TimeUnit.DAYS);

来源:https://blog.csdn.net/qq_35387940/article/details/82625922

标签:SpringBoot,Redis,RedisConfig
0
投稿

猜你喜欢

  • C#图像边缘检测(Roberts)的方法

    2022-12-26 15:11:18
  • mybatis insert返回主键代码实例

    2022-04-08 02:24:01
  • c# for循环中创建线程执行问题

    2021-09-15 20:43:23
  • 超详细的Spring Boot入门笔记(总结)

    2022-10-26 18:44:21
  • Java保留两位小数的几种写法总结

    2022-04-19 06:53:06
  • Struts2实现对action请求对象的拦截操作方法

    2023-06-08 01:54:13
  • 如何只返回实体类中的部分字段问题

    2022-11-28 05:09:53
  • C#利用缓存分块读写大文件

    2022-10-20 11:18:22
  • Java将字符串转化为数组的两种方法

    2021-07-07 20:33:49
  • 解析使用enumerator模式简化异步操作的详解

    2021-10-08 01:44:54
  • Java超详细分析泛型与通配符

    2023-07-28 08:34:26
  • C# 调用WebService的方法

    2022-03-19 12:42:37
  • Java 多线程同步 锁机制与synchronized深入解析

    2023-12-20 17:55:50
  • Java开发人员需知的十大戒律

    2023-09-17 07:33:50
  • android判断手机是否安装地图应用实现跳转到该地图应用

    2022-11-30 11:01:45
  • Java应用开源框架实现简易web搜索引擎

    2023-08-22 20:20:54
  • Android自定义view利用PathEffect实现动态效果

    2023-08-17 09:35:00
  • idea打包java程序(包含依赖的所有jar包)

    2023-02-13 00:10:26
  • Android Activity通用悬浮可拖拽View封装的思路详解

    2023-08-08 15:31:48
  • TextBox获取输入焦点时自动全选的实现方法

    2022-01-01 02:22:49
  • asp之家 软件编程 m.aspxhome.com