이전 연구를 통해 이미 Redis에 문자열을 저장할 수 있는데, Java 객체를 Redis에 저장하려면 어떻게 해야 할까요?
Java 개체를 JSON 개체로 변환한 다음 이를 JSON 문자열로 변환하고 Redis에 저장할 수 있습니다. 그런 다음 Redis에서 데이터를 가져올 때 문자열만 꺼내어 Java 개체로 변환할 수 있습니다. , 이 일련의 작업이 조금 번거로운 것 같나요?
위는 RedisAutoConfiguration 클래스의 소스 코드입니다. SpringBoot가 자동으로 Redis를 구성할 때 redisTemplate과 stringRedisTemplate을 컨테이너에 주입하는 것을 볼 수 있습니다. RedisTemplate는 키 유형이 Object이고 값 유형이 Object라는 것을 의미하지만 우리에게 자주 필요한 것은 RedisTemplate
이 @ConditionalOnMissingBean 주석을 보고 나면 Spring 컨테이너에 RedisTemplate 객체가 있으면 자동으로 구성된 RedisTemplate이 인스턴스화되지 않는다는 것을 알 수 있습니다. 따라서 RedisTemplate을 구성하기 위해 사용자 정의 구성 클래스를 작성할 수 있습니다.
3. RedisTemplate 삽입
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
Redis의 핵심 RedisConfig.java 파일에 구성을 넣었습니다
spring: # Redis配置 redis: host: 127.0.0.1 port: 6379 database: 10 jedis: pool: # 连接池最大连接数(使用负值表示没有限制) max-active: 50 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: 3000ms # 连接池中的最大空闲连接数 max-idle: 20 # 连接池中的最小空闲连接数 min-idle: 5 # 连接超时时间(毫秒) timeout: 5000ms
package com.zyxx.redistest.common; 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.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * @ClassName RedisConfig * @Description * @Author Lizhou * @Date 2020-10-22 9:48:48 **/ @Configuration public class RedisConfig { /** * RedisTemplate配置 */ @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 配置redisTemplate RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 设置序列化 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); jackson2JsonRedisSerializer.setObjectMapper(om); // key序列化 redisTemplate.setKeySerializer(new StringRedisSerializer()); // value序列化 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // Hash key序列化 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); // Hash value序列化 redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } }
테스트를 위해 get 및 set이라는 두 가지 메서드를 작성했습니다. Test
1.
package com.zyxx.redistest.common; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; /** * @ClassName RedisUtils * @Description * @Author Lizhou * @Date 2020-10-22 10:10:10 **/ @Slf4j @Component public class RedisUtils { @Autowired private RedisTemplate<String, Object> redisTemplate; /** * 根据key读取数据 */ public Object get(final String key) { if (StringUtils.isBlank(key)) { return null; } try { return redisTemplate.opsForValue().get(key); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 写入数据 */ public boolean set(final String key, Object value) { if (StringUtils.isBlank(key)) { return false; } try { redisTemplate.opsForValue().set(key, value); log.info("存入redis成功,key:{},value:{}", key, value); return true; } catch (Exception e) { log.error("存入redis失败,key:{},value:{}", key, value); e.printStackTrace(); } return false; } }2. 테스트 케이스
package com.zyxx.redistest.common; import lombok.Data; import java.io.Serializable; import java.util.Date; /** * @ClassName UserInfo * @Description * @Author Lizhou * @Date 2020-10-22 10:12:12 **/ @Data public class UserInfo implements Serializable { /** * id */ private Integer id; /** * 姓名 */ private String name; /** * 创建时间 */ private Date createTime; }
위 내용은 SpringBoot가 Redis를 통합하여 Java 객체를 직렬화하고 저장하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!