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

PHPz
풀어 주다: 2023-05-29 15:07:06
앞으로
641명이 탐색했습니다.

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 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으로 문의하세요.
최신 이슈
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!