Redis는 프로젝트에서 일부 사전 데이터, 세션 데이터 및 임시 데이터가 Redis에 저장됩니다. 일반적으로 여러 스레드가 하나의 Redis 구현을 함께 사용할 수 있으며 각 스레드는 위험합니다. 하나의 스레드를 구현하는 것은 리소스를 너무 낭비합니다. 스레드 수를 제어할 수 없다는 것은 매우 위험하므로 일부 Redis 스레드 풀 구성 요소가 등장했습니다.
jedis 스레드 풀은 주로 각 인스턴스가 자체 스레드를 가지며, 생성된 풀에서 스레드를 얻을 수 있음을 의미합니다.
lettuce lettuce는 Apache에서 시작하는 스레드 풀 도구로, 여러 스레드에서 공유하고 액세스할 수 있습니다. 향상된 리소스 사용
일반적으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!