>데이터 베이스 >Redis >springboot에서 redis를 올바르게 사용하는 방법

springboot에서 redis를 올바르게 사용하는 방법

PHPz
PHPz앞으로
2023-05-29 15:07:06706검색

Redis는 프로젝트에서 일부 사전 데이터, 세션 데이터 및 임시 데이터가 Redis에 저장됩니다. 일반적으로 여러 스레드가 하나의 Redis 구현을 함께 사용할 수 있으며 각 스레드는 위험합니다. 하나의 스레드를 구현하는 것은 리소스를 너무 낭비합니다. 스레드 수를 제어할 수 없다는 것은 매우 위험하므로 일부 Redis 스레드 풀 구성 요소가 등장했습니다.

jedis 스레드 풀은 주로 각 인스턴스가 자체 스레드를 가지며, 생성된 풀에서 스레드를 얻을 수 있음을 의미합니다.
lettuce lettuce는 Apache에서 시작하는 스레드 풀 도구로, 여러 스레드에서 공유하고 액세스할 수 있습니다. 향상된 리소스 사용

redis 직렬화 구성

일반적으로 redis-key는 문자열 직렬화를 사용하고 redis-value는 json 직렬화를 사용합니다. JSON은 크기가 작고 읽기 쉬우며 직렬 변환기 인터페이스를 구현할 필요가 없습니다.

/**
 * 对redis的配置.
 */
@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    /**
     * redis重写RedisTemplate.
     */
    @Bean
    public RedisTemplate redisTemplate() {
        RedisTemplate redisTemplate = new RedisTemplate();
        RedisSerializer<String> stringSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        //序列化时允许非常量字段均输出类型,即redis序列化后带有类型
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // redis key的序列化
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);

        // redis value的序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

위 코드에서 om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL)이 생성한 json 문자열에는 타입이 있어서 역직렬화 시 해당 타입을 통해 직접 유추할 수 있습니다.

[
  "com.lind.basic.entity.Token",
  {
    "credentials": "ok",
    "region": "hello",
    "bucket": null
  }
]

추가 및 읽기 코드를 살펴보세요

 @GetMapping("set")
    public String set() throws JsonProcessingException {
        Token token = Token.builder()
                .credentials("ok")
                .region("hello")
                .build();
        redisTemplate.opsForValue().set("test:user", token);//redisTemplate帮我们序列化
        redisTemplate.opsForHash().put("author", "zzl", token);
        return "OK";
    }

    @GetMapping("get")
    public Token get() throws IOException {
        return (Token) redisTemplate.opsForValue().get("test:user");
    }

참고: 엔터티 클래스 Token의 경우 역직렬화에 필요한 인수 없는 생성자가 있어야 합니다.

위 내용은 springboot에서 redis를 올바르게 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제