redis와 spring의 통합은 일반적으로 spring-data-redis 통합과 jedis 통합으로 구분됩니다.
1 참조되는 종속성이 다릅니다. spring-data-redis는 다음과 같습니다.
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.9.RELEASE</version> </dependency>
jedis에서 사용하는 종속성은 다음과 같습니다.
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> <type>jar</type> <scope>compile</scope> </dependency>
2. jedis 인스턴스 관리 및 Redis 서비스 운영 방법의 차이점:
spring-data-redis:
org를 통해 .springframework.data.redis.connection.jedis.JedisConnectionFactory 관리, 즉 팩토리 클래스 관리를 거쳐 구성된 템플릿 빈을 통해 코드 세그먼트가 수많은 템플릿 조각 코드로 채워집니다. 비즈니스와 관련이 없습니다. 다음 코드와 같이 코드는 중복되고 유지 관리가 어렵습니다.
protected RedisTemplate<Serializable, Serializable> redisTemplate; public void saveUser(User user) { redisTemplate.execute(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { connection.set(redisTemplate.getStringSerializer().serialize("user.uid." + user.getId()), redisTemplate.getStringSerializer().serialize(user.getName())); return null; } }); } public User getUser(long id) { return redisTemplate.execute(new RedisCallback<User>() { @Override public User doInRedis(RedisConnection connection) throws DataAccessException { byte[] key = redisTemplate.getStringSerializer().serialize("user.uid." + id); if (connection.exists(key)) { byte[] value = connection.get(key); String name = redisTemplate.getStringSerializer().deserialize(value); User user = new User(); user.setName(name); user.setId(id); return user; } return null; } }); }
RedisTemplate 소개
spring은 Redis에서 다양한 작업을 수행하기 위해 RedisTemplate 개체를 캡슐화합니다. RedisTemplate은 다음과 같이 일반적으로 사용되는 여러 인터페이스 방법을 제공합니다.
private ValueOperations
RedisTemplate은 5가지 데이터 구조에 대한 작업을 정의합니다
redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set StringRedisTemplate与RedisTemplate
둘 사이의 관계는 StringRedisTemplate이 RedisTemplate을 상속한다는 것입니다.
둘 사이의 데이터는 일반적이지 않습니다. 즉, StringRedisTemplate은 StringRedisTemplate에서만 데이터를 관리할 수 있고 RedisTemplate은 RedisTemplate에서만 데이터를 관리할 수 있습니다.SDR은 기본적으로 두 가지 직렬화 전략을 채택합니다. 하나는 문자열 직렬화 전략이고 다른 하나는 JDK 직렬화 전략입니다.
StringRedisTemplate은 기본적으로 String 직렬화 전략을 사용하며, 저장된 키와 값은 이 전략을 사용하여 직렬화되어 저장됩니다.
RedisTemplate은 기본적으로 JDK 직렬화 전략을 사용하며, 저장된 키와 값은 이 전략을 사용하여 직렬화되어 저장됩니다.
jedis 방식:
redis.clients.jedis.JedisPool을 통해 관리, 즉 pool을 통해 관리하고, pool 객체를 통해 jedis 인스턴스를 얻은 후, jedis 인스턴스를 통해 redis 서비스를 직접 운영함으로써 중복되는 코드를 제거한다. 예를 들어 다음 코드 조각은 다음과 같습니다.
private JedisPool jedisPool; public String save(String key,String val) { Jedis jedis = jedisPool.getResource(); return jedis.set(key, val); }
팩토리 클래스에서 풀로의 변경은 mybatis가 mysql에 연결하는 것과 동일합니다. 코드가 더 간단해지고 유지 관리가 쉬워집니다. Jedis는 Apache commons-pool2를 사용하여 Jedis 리소스 풀을 관리하므로 JedisPool을 정의할 때 매우 중요한 매개 변수는 리소스 풀 GenericObjectPoolConfig입니다. 사용 방법은 다음과 같으며 리소스 관리 및 사용을 위한 많은 매개 변수가 있습니다.
매개변수 설명
JedisPool은 리소스가 제어 가능한 범위 내에 있는지 확인하고 스레드 안전성을 제공하지만 합리적인 GenericObjectPoolConfig 구성은 Redis를 사용하여 애플리케이션을 보호할 수 있습니다. 중요한 매개변수 중 일부는 아래에 설명 및 제안됩니다.
현재 환경에서는 Jedis 연결은 리소스이며 JedisPool은 Jedis 연결을 관리합니다.
1. 리소스 설정 및 사용량
maxTotal: 리소스 풀의 최대 연결 수, 기본값: 8. 제안 설정은 다음 섹션을 참조하세요.
maxIdle: 리소스 풀에서 허용되는 최대 유휴 연결 수입니다. 기본값: 8; 사용 제안: 설정 제안: 다음 섹션을 참조하세요.minIdle: 리소스 풀은 최소 유휴 연결 수를 보장합니다. 기본값: 0; 사용 제안: 제안 설정은 다음 섹션을 참조하세요.
blockWhenExhausted: 리소스 풀이 발신자가 기다려야 하는지 여부는 지쳤습니다. true인 경우에만 다음 maxWaitMillis가 적용됩니다. 기본값: true; 사용 권장 사항: 기본값을 사용하는 것이 좋습니다
maxWaitMillis: 리소스 풀 연결이 소진되면 호출자의 최대 대기 시간(밀리초) -1: 시간 초과 없음을 나타냅니다. 사용 권장 사항: 기본값을 사용하지 않는 것이 좋습니다.
testOnBorrow: 리소스 풀에서 연결을 빌릴 때 연결 유효성 검사(ping)를 수행할지 여부, 잘못된 연결이 제거됩니다. 기본값: false; : 비즈니스 볼륨이 매우 높습니다. 대부분의 경우 false로 설정하는 것이 좋습니다(ping을 한 번 더 수행하는 데 드는 비용).
testOnReturn: 리소스 풀로 연결을 반환할 때 연결 유효성 감지(ping)를 수행할지 여부, 잘못된 연결은 제거됩니다. 기본값: false 사용 권장 사항: 비즈니스 볼륨이 클 경우 false로 설정하는 것이 좋습니다. (핑을 한 번 더 하는 비용) .
jmxEnabled: 모니터링에 사용할 수 있는 jmx 모니터링 활성화 여부, 기본값: true, 사용 권장 사항: 활성화하는 것이 좋지만 애플리케이션 자체도 활성화해야 합니다.
2 유휴 Jedis 객체 감지에서는 다음 4개의 매개변수가 결합되어 완료됩니다. testWhileIdle은 이 기능의 스위치입니다.
testWhileIdle: 유휴 리소스 모니터링 활성화 여부, 기본값: false; 사용 제안: true
timeBetweenEvictionRunsMillis: 유휴 리소스 감지 기간(밀리초); 기본값: -1: 감지 없음, 기간 선택 혼자서도 기본적으로 아래 JedisPoolConfig의 구성을 사용할 수 있습니다.
minEvictableIdleTimeMillis: 리소스 풀에 있는 리소스의 최소 유휴 시간(밀리초)입니다. 이 값에 도달하면 유휴 리소스가 제거됩니다. 기본값: 1000 60 30 = 30분 사용 제안: 비즈니스에 따라 결정할 수 있으며 대부분의 기본값이 충분합니다. 아래 JeidsPoolConfig의 구성 사용을 고려할 수도 있습니다
numTestsPerEvictionRun: 유휴 리소스 감지를 수행할 때마다 샘플 수 ; 기본값: 3; 사용법 제안: 애플리케이션 연결 수를 미세 조정하여 사용할 수 있습니다. -1로 설정하면 모든 연결이 유휴 상태인지 모니터링됩니다.
위 내용은 레디스와 제디스의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!