package com.example.redis.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.sql.SQLException;
/**
* @ClassName RedisConfiguration
* @Description: Redis配置类
* @Author ***
* @Date 2019/10/29
**/
@Configuration
public class RedisConfiguration {
@Bean
@SuppressWarnings("all")
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String,Object> template = new RedisTemplate<>();
//配置连接工厂
template.setConnectionFactory(factory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
//指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会抛出异常
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
//hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
//hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
/**
* @description: 对Hash类型的数据操作
* @param redisTemplate RedisTemplate
* @author: ***
* @date: 2019/10/29 15:03
* @return: org.springframework.data.redis.core.HashOperations<java.lang.String,java.lang.String,java.lang.Object>
*/
@Bean
public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForHash();
}
/**
* @description: 对String类型数据操作
* @param redisTemplate RedisTemplate
* @author: ***
* @date: 2019/10/29 15:04
* @return: org.springframework.data.redis.core.ValueOperations<java.lang.String,java.lang.Object>
*/
@Bean
public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForValue();
}
/**
* @description: 对List(链表)类型的数据操作
* @param redisTemplate RedisTemplate
* @author: ***
* @date: 2019/10/29 15:04
* @return: org.springframework.data.redis.core.ListOperations<java.lang.String,java.lang.Object>
*/
@Bean
public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForList();
}
/**
* @description: 对Set(无序集合)类型的数据操作
* @param redisTemplate RedisTemplate
* @author: ***
* @date: 2019/10/29 15:05
* @return: org.springframework.data.redis.core.SetOperations<java.lang.String,java.lang.Object>
*/
@Bean
public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForSet();
}
/**
* @description: 对ZSet(有序集合)类型的数据操作
* @param redisTemplate RedisTemplate
* @author: ***
* @date: 2019/10/29 15:05
* @return: org.springframework.data.redis.core.ZSetOperations<java.lang.String,java.lang.Object>
*/
@Bean
public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForZSet();
}
}
springboot的Redis配置类
最新推荐文章于 2023-05-04 23:59:54 发布