>  기사  >  데이터 베이스  >  SpringBoot에서 Redis를 사용하는 방법

SpringBoot에서 Redis를 사용하는 방법

WBOY
WBOY앞으로
2023-06-02 14:43:211950검색

1. 종속성

Maven 종속성은 다음과 같습니다. spring-boot-starter-data-redis는 기본적으로 redis 클라이언트의 드라이버로 lettuce를 사용하지만, 우리는 종종 jedis를 사용합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

2. 종속성

스프링 데이터 redis의 종속성:

SpringBoot에서 Redis를 사용하는 방법

이 종속성이 표현하려는 것은 Spring이 RedisConnection을 통해 Redis를 작동한다는 것입니다. 네이티브 제다이 라인. RedisConnection 인터페이스 객체를 얻으려면 RedisConnectionFactory를 통해 생성됩니다.

3. Configuration

구성 파일 구성:

# Redis 连接配置
# 单机 Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
# 连接池配置
spring.redis.jedis.pool.max-idle=30
spring.redis.jedis.pool.max-total=50
spring.redis.jedis.pool.max-wait=2000ms

코드 구성:

@Configuration
public class RedisConfig {
    private RedisConnectionFactory connectionFactory = null;
 
    @Bean
    public RedisConnectionFactory initRedisConnectionFactory(){
        if(connectionFactory!=null){
            return connectionFactory;
        }
        JedisPoolConfig poolConfig =new JedisPoolConfig();
        //最大空闲数
        poolConfig.setMaxIdle(30);
        //最大连接数
        poolConfig.setMaxTotal(50);
        //最大等待毫秒数
        poolConfig.setMaxWaitMillis(2000);
        //创建Jedis连接工厂
        JedisConnectionFactory connectionFactory=new JedisConnectionFactory(poolConfig);
        //获取单机的redis配置,如果是集群的话用集群配置类
        RedisStandaloneConfiguration rscfg=connectionFactory.getStandaloneConfiguration();
        connectionFactory.setHostName("127.0.0.1");
        connectionFactory.setPort(6379);
        return connectionFactory;
    }
}

4. RedisTemplate

여기서 설명하고 싶은 것은 RedisConnection을 직접 사용하여 Redis를 실행하려면 RedisConnectionFactory를 수동으로 찾아야 한다는 것입니다. RedisConnection. 그리고 RedisConnection은 매번 수동으로 닫아야 합니다. 따라서 Spring Data Redis는 작업을 용이하게 하기 위해 RedisTemplate을 제공하며 이는 jedis에서 캡슐화되어 리소스 획득 및 해제 단계를 차단합니다.

RedisTemplate을 사용할 때 주의해야 할 핵심은 직렬 변환기입니다. RedisTemplate에는 여러 개의 직렬 변환기가 있습니다. 각 직렬 변환기는 키 값을 쓰고 Redis를 읽는 과정에서 서로 다른 직렬화 방법을 사용합니다. 예를 들어 문자를 처리할 때는 문자열별 직렬 변환기를 사용해야 하고, 객체를 처리할 때는 개체별 직렬 변환기를 사용해야 합니다.

현재 직렬 변환기는 다음과 같습니다.

SpringBoot에서 Redis를 사용하는 방법

StringRedisSerializer:

StringRedisSerializer는 기본적으로 RedisTemplate에서 사용하는 키 및 값 직렬 변환기이며 UTF-8 코딩을 사용하여 문자열을 바이트 배열로 직렬화합니다. Redis의 Key와 Value는 모두 문자열이므로 기본 StringRedisSerializer 직렬 변환기는 대부분의 상황 요구 사항을 충족할 수 있습니다.

Jackson2JsonRedisSerializer:

Jackson2JsonRedisSerializer는 객체를 JSON 형식 문자열로 직렬화하고 Redis에 저장할 수 있는 Jackson 기반의 Redis 키 및 값 직렬 변환기입니다. Jackson2JsonRedisSerializer 직렬 변환기를 사용하려면 Jackson 종속성을 추가해야 합니다. 개체를 JSON 형식 문자열로 변환하거나 JSON 형식 문자열을 개체로 변환할 수 있습니다.

JdkSerializationRedisSerializer:

JdkSerializationRedisSerializer는 Java 고유의 ​​직렬화 방법을 기반으로 하는 직렬 변환기로, 객체를 저장을 위해 바이트 배열로 직렬화할 수 있습니다. JdkSerializationRedisSerializer는 간단하고 사용하기 쉽지만 효율성이 상대적으로 낮고 직렬화된 바이트 배열이 상대적으로 크기 때문에 많은 양의 데이터를 저장하는 데 적합하지 않습니다.

GenericJackson2JsonRedisSerializer:

GenericJackson2JsonRedisSerializer는 모든 유형의 객체를 직렬화하고 객체를 JSON 형식 문자열로 직렬화할 수 있는 제네릭을 지원하는 Jackson2JsonRedisSerializer입니다. 직렬화 및 역직렬화 중에 대상 유형을 지정해야 합니다.

OxmSerializer:

OxmSerializer는 객체를 XML 형식 문자열로 직렬화하는 것을 지원하는 Spring의 O/X 매핑 프레임워크를 기반으로 하는 직렬 변환기입니다. OxmSerializer는 유연성이 높지만 직렬화 및 역직렬화 성능이 낮고 대용량 데이터를 저장하는 데 적합하지 않습니다.

간단히 말하면, 시리얼라이저를 선택할 때는 실제 상황에 따라 선택해야 하며, 데이터 유형 및 성능 요구 사항에 따라 적절한 시리얼라이저를 선택해야 합니다.

사용할 때 직접 설정할 수 있습니다. 설정 시 모든 Redis 유형 데이터 구조에 효과적인지 또는 특정 유형의 Redis 데이터 구조 유형에 효과적인지 여부에 대한 많은 옵션이 제공됩니다. :

SpringBoot에서 Redis를 사용하는 방법

예를 들어 전역적으로 적용되는 문자열 직렬 변환기를 사용하고 싶습니다.

@Bean
public RedisTemplate<Object,Object> initRedisTemplate(){
  RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
  redisTemplate.setDefaultSerializer(new StringRedisSerializer());
  return redisTemplate;
}

5. 기본 작업

다음은 Redis 기본 데이터 유형을 작동하기 위해 RedisTemplate을 사용하는 코드 예제입니다. @Bean이 RedisTemplate을 정의할 때 사용할 때 일반 및 일반 정렬이어야 한다는 점에 유의해야 합니다.

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service
public class RedisService {
 
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
 
    public void setString(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }
 
    public String getString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }
 
    public void setHash(String key, String hashKey, Object value) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.put(key, hashKey, value);
    }
 
    public Object getHash(String key, String hashKey) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.get(key, hashKey);
    }
 
    public void setList(String key, Object value) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        listOps.rightPush(key, value);
    }
 
    public Object getList(String key, long index) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        return listOps.index(key, index);
    }
 
    public void setSet(String key, Object value) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        setOps.add(key, value);
    }
 
    public Object getSet(String key) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        return setOps.members(key);
    }
 
    public void setZSet(String key, Object value, double score) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        zsetOps.add(key, value, score);
    }
 
    public Object getZSet(String key, long start, long end) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        return zsetOps.range(key, start, end);
    }
 
}

6. 거래

다음은 거래를 사용한 코드 예시입니다:

@Autowired
private RedisTemplate<String, String> redisTemplate;
 
public void transactionalOperation() {
    // 开启 Redis 事务
    redisTemplate.multi();
 
    try {
        // 执行多个 Redis 命令
        redisTemplate.opsForValue().set("key1", "value1");
        redisTemplate.opsForValue().set("key2", "value2");
 
        // 提交事务
        redisTemplate.exec();
    } catch (Exception e) {
        // 回滚事务
        redisTemplate.discard();
    }
}

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

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