25.Springboot 통합 redis 와 그 사용 사례

1.의존 도 추가
		
			org.springframework.boot
			spring-boot-starter-data-redis
		

2.설정
spring:
  redis:
    host: 192.168.10.134
    port: 6379
    #springboot   redis,       
	#password: 199266

3.Springboot-data-redis 가 RedisTemplate 대상 을 자동 으로 불 러 오기 때문에 이 bean 을 등록 할 필요 가 없습니다.
  하지만 기본 RedisTemplate 를 사용 하면 redis 에 직렬 화 되 어 있 으 면 key 가 됩 니 다.예 를 들 어 저장 하기 전에 key 는"test"이 고 redis 에 들 어가 면 key 는"\xac\xed\x00\x05t\x00\x04test"가 된다.이것 은 RedisTemplate 가 기본적으로 제공 하 는 직렬 화 프로 토 콜 과 관련 이 있다.그것 을 우리 의 요구 에 더욱 부합 시 키 기 위해 서 우 리 는 직렬 화 협 의 를 제정 해 야 한다.
여기 서 저 희 는 Springboot 가 가지 고 있 는 Jackson 을 직렬 화 프로 토 콜 로 선택 하고 구체 적 인 설정 은 다음 과 같 습 니 다.
@Configuration
public class RedisConfiguration {
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        //   Jackson2JsonRedisSerialize        
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        //   value        key      
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setKeySerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

4.창고 저장 인터페이스 와 그 실현 창고 저장 인터페이스
/**
 *        repository,     ,spring       repository:@NoRepositoryBean
 */
@NoRepositoryBean
public interface UserRepository {
    boolean save(User user);
    User findUser(Long id);
}

창고 저장 실현
@Repository("userRepositoryByRedis")
public class UserRepositoryImplByRedis implements UserRepository {
    /**
     *   :redis      RedisAutoConfiguration      bean redisTemplate 
     * stringRedisTemplate,     RedisTemplate    ,  RedisTemplate,
     *         ,            bean
     */
    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public boolean save(User user) {
        try {
            redisTemplate.opsForValue().set(String.valueOf(user.getId()), user);
            return true;
        } catch (Exception e){
            System.out.println(e.toString());
            return false;
        }
    }

    @Override
    public User findUser(Long id) {
        try {
            return (User) redisTemplate.opsForValue().get(String.valueOf(id));
        } catch (Exception e){
            System.out.println(e.toString());
            return null;
        }
    }
}

5.테스트
@RestController
@RequestMapping("/user")
public class UserController {
   @Autowired
    @Qualifier("userRepositoryByRedis")
    private UserRepository userRepository;
    
    @PostMapping
    public boolean save(@RequestBody User user){
        return userRepository.save(user);
    }
    @GetMapping("/{id}")
    public User findUser(@PathVariable Long id){
        return userRepository.findUser(id);
    }
}

좋은 웹페이지 즐겨찾기