>  기사  >  데이터 베이스  >  레디스와 제디스의 차이점은 무엇입니까

레디스와 제디스의 차이점은 무엇입니까

尚
원래의
2019-06-29 17:10:4816827검색

레디스와 제디스의 차이점은 무엇입니까

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 listOps;private SetOperations zSetOps ;

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로 설정하면 모든 연결이 유휴 상태인지 모니터링됩니다.

Redis 사용법 튜토리얼

칼럼!

위 내용은 레디스와 제디스의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.