봄 부팅 2.X (육) : 봄 부팅 레디 스 통합

레디 스 소개

레디 스 무엇입니까

레디 스는 무료 오픈 소스 인 메모리 데이터베이스의 매우 넓은 범위에서 사용되는, 높은 성능의 키 - 값 데이터베이스입니다.

다른 키 값 (예를 들어, Memcached가)와 레디 스 캐시는 다음의 세 가지 특성을 비교했다 :

1.Redis 지원 데이터 지속성, 그것은 디스크에 메모리에 데이터를 저장하면 다시 사용할 수있을 때로드 재부팅 할 수 있습니다.
또한 저장리스트 세트 ZSET 해시 및 다른 데이터 구조를 제공하는 동시에 2.Redis은 간단한 키 값 데이터 유형을 지원한다.
백업 데이터, 즉, 데이터 백업 마스터 - 슬레이브 모드 지원 3.Redis.

다음과 같이 레디 스의 장점은 다음과 같습니다 :

1. 매우 높은 성능 . 레디 스는 빠른 속도로 11 만 배 / s의 읽기 속도는 81000 회 / s입니다 작성할 수 있습니다.
2. 다양한 데이터 유형 . 레디 스 이진 스트링 경우, 목록 세트를 지원 및 정렬은 동작의 데이터 형식을 설정한다.
3. 자성 . 레디 스 모든 작업이 성공하거나 완전히 실행 실행을 실패하거나 의미 원자이다. 그것은 단일 원자 조작도 치켜 EXEC 명령어 MULTI 의해 동작하는 복수이다.
4. 풍부한 기능 . 레디 스 또한, 통지, 키 만료 및 기타 특성을 게시 / 구독 지원합니다.

봄 부팅 레디 스 통합

1. 추가 프로젝트에 따라 달라집니다

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.zwqh</groupId>
    <artifactId>spring-boot-redis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-redis</name>
    <description>spring-boot-redis</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

다음 봄 데이터 레디 스 다음과 같은 기본 경로를 패키지 org.springframework.data.redis.connection 발견 항아리 패키지를 볼 때 기본 패키지 봄 부팅이 두 레디 스 클라이언트를 채택했다 보여주는 두 개의 패키지 jedis 양상추 있습니다.

기본에서 레디 스 클라이언트 springboot 1.5.x 이하 버전은 Jedis 기본 클라이언트의 springboot의 2.X 버전 양상추와 함께 달성, 구현됩니다.

양상추와 비교 Jedis

상추Jedis 고객은 레디 스 서버 끝을 연결됩니다.

Jedis 당신이 연결 풀을 사용하지 않는 구현에 직접 비 스레드 안전 레디 스 서버, 멀티 스레드 환경을 연결, 각 레디 스 인스턴스에 대한 물리적 연결을 증가시킨다.


양상추 , 복수 스레드로함으로써, 동기 및 비동기 데이터 접속을 제공하는 효율적인 다중 연결을 관리의 Netty NIO 프레임 워크를 사용하는 RedisConnection을 확장 가능한 스레드 안전 완전히 비 차단 클라이언트 레디 스 공유 할 수있다 비 차단 응용 프로그램에 대한 반응성의 건설.


양상추와 Jedis는 레디 스 서비스를 통합하는 데 사용하는 여기에 우리가 있었다

2. 상추 레디 스 통합 서비스

수입 의존

봄 부팅 2.X의 기본 양상추 통합, 그래서 때문에 필요 가져올 수 없습니다.

application.properties 프로필

################ Redis 基础配置 ##############
# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=zwqh
# 链接超时时间 单位 ms(毫秒)
spring.redis.timeout=3000
################ Redis 线程池设置 ##############
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0

사용자 정의 RedisTemplate

기본 템플릿에서 지원 만 할 수 있습니다 RedisTemplate<String,String>만, 매우 자주, 우리가 RedisTemplate을 사용자 정의하는 데 필요한 시리얼을 설정하는 문자열에 저장 될 수있다, 그래서 우리는 쉽게 객체 인스턴스를 조작 할 수 있습니다. 다음과 같습니다 :

@Configuration
public class LettuceRedisConfig {

    @Bean
    public RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }
}

시퀀스 엔티티 클래스

public class UserEntity implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 5237730257103305078L;
    
    private Long id;
    private String userName;
    private String userSex;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserSex() {
        return userSex;
    }
    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }
    
}

유닛 테스트


@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootRedisApplicationTests {

    @Autowired
    private RedisTemplate<String, String> strRedisTemplate;
    @Autowired
    private RedisTemplate<String, Serializable> serializableRedisTemplate;
    
    @Test
    public void testString() {
        strRedisTemplate.opsForValue().set("strKey", "zwqh");
        System.out.println(strRedisTemplate.opsForValue().get("strKey"));
    }
    
    @Test
    public void testSerializable() {
        UserEntity user=new UserEntity();
        user.setId(1L);
        user.setUserName("朝雾轻寒");
        user.setUserSex("男");       
        serializableRedisTemplate.opsForValue().set("user", user);      
        UserEntity user2 = (UserEntity) serializableRedisTemplate.opsForValue().get("user");
        System.out.println("user:"+user2.getId()+","+user2.getUserName()+","+user2.getUserSex());
    }

}

다음과 같이 결과는

우리가 예상 한 결과를 얻을 수 있습니다.

3.Jedis 레디 스 통합 서비스

치어 파일

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.zwqh</groupId>
    <artifactId>spring-boot-redis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-redis</name>
    <description>spring-boot-redis</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <!-- 排除lettuce包 -->
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 添加jedis客户端 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
    
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.properties 프로필

################ Redis 基础配置 ##############
# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=zwqh
# 链接超时时间 单位 ms(毫秒)
spring.redis.timeout=3000
################ Redis 线程池设置 ##############
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.jedis.pool.min-idle=0

JedisRedisConfig

@Configuration
public class JedisRedisConfig {

    @Value("${spring.redis.database}")
    private int database;
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.timeout}")
    private int timeout;
    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxActive;
    @Value("${spring.redis.jedis.pool.max-wait}")
    private long maxWaitMillis;
    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;

    /**
     * 连接池配置信息
     */

    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 最大连接数
        jedisPoolConfig.setMaxTotal(maxActive);
        // 当池内没有可用连接时,最大等待时间
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        // 最大空闲连接数
        jedisPoolConfig.setMinIdle(maxIdle);
        // 最小空闲连接数
        jedisPoolConfig.setMinIdle(minIdle);
        // 其他属性可以自行添加
        return jedisPoolConfig;
    }

    /**
     * Jedis 连接
     * 
     * @param jedisPoolConfig
     * @return
     */
    @Bean
    public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
        JedisClientConfiguration jedisClientConfiguration = JedisClientConfiguration.builder().usePooling()
                .poolConfig(jedisPoolConfig).and().readTimeout(Duration.ofMillis(timeout)).build();
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(host);
        redisStandaloneConfiguration.setPort(port);
        redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
        return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
    }

    /**
     * 缓存管理器
     * 
     * @param connectionFactory
     * @return
     */
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        return RedisCacheManager.create(connectionFactory);
    }

    @Bean
    public RedisTemplate<String, Serializable> redisTemplate(JedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setConnectionFactory(jedisConnectionFactory(jedisPoolConfig()));
        return redisTemplate;
    }

}

유닛 테스트 같은 책

예상 결과.

개요

상기는, 양상추와 Jedis에 의해 봄 부팅 2.X 레디 스 서비스를 통합하는 프로젝트 요구 사항에 따라, 우리는 데이터 조작 작업을 구현하는 클래스를 정의하는 방법에 대해 설명합니다.

샘플 코드

GitHub의

클라우드 코드

비 특정 지침, 문서 속한 아 사기리 청 한이 모든 소스를 표시하시기 바랍니다.

원제 : 봄 부팅 2.X (육) : 봄 부팅 레디 스 통합

원본 주소 : https://www.zwqh.top/article/info/11

추천

출처www.cnblogs.com/zwqh/p/11664782.html