레디 스 소개
레디 스 무엇입니까
레디 스는 무료 오픈 소스 인 메모리 데이터베이스의 매우 넓은 범위에서 사용되는, 높은 성능의 키 - 값 데이터베이스입니다.
다른 키 값 (예를 들어, 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 레디 스 서비스를 통합하는 프로젝트 요구 사항에 따라, 우리는 데이터 조작 작업을 구현하는 클래스를 정의하는 방법에 대해 설명합니다.
샘플 코드
비 특정 지침, 문서 속한 아 사기리 청 한이 모든 소스를 표시하시기 바랍니다.
원제 : 봄 부팅 2.X (육) : 봄 부팅 레디 스 통합