spring-data-redis 와 jedis 용법,차이

6707 단어 자바javawebnosql
지식 을 나 누 어 즐거움 을 전하 다.
Redis 는 키 와 5 가지 서로 다른 데이터 구조 유형 간 의 맵 을 저장 할 수 있 습 니 다.이 5 가지 데이터 구조 유형 은 각각 String(문자열),List(목록),Set(집합),Hash(해시)와 Zset(질서 있 는 집합)입 니 다.
 
 
 
redis 와 spring 의 통합 은 일반적으로 spring-data-redis 통합 과 jedis 통합 으로 나 뉘 는데 먼저 이들 의 차 이 를 살 펴 보 자.
 
 
 
1.인용 의존 도가 다르다.
spring-data-redis 에서 사용 하 는 의존 도 는 다음 과 같 습 니 다.
  
    org.springframework.data  
    spring-data-redis  
    1.8.9.RELEASE  

jedis 에서 사용 하 는 의존 도 는 다음 과 같 습 니 다.

    redis.clients
    jedis
    2.9.0
    jar
    compile


 
 
2.jedis 인 스 턴 스 방식 을 관리 하고 redis 서 비 스 를 조작 하 는 것 이 다 릅 니 다.
 
 
spring-data-redis:
    org.springframework.data.redis.connection.jedisConnection Factory 를 통 해 관리 합 니 다.즉,공장 류 관 리 를 통 해 설 치 된 모델 bean 을 통 해 redis 서 비 스 를 조작 합 니 다.코드 세그먼트 에는 업무 와 무관 한 모델 세 션 코드 가 대량으로 가득 하고 코드 가 지루 하 며 유지 하기 어렵 습 니 다.예 를 들 어 아래 코드 와 같 습 니 다.
protected RedisTemplate redisTemplate;

public void saveUser(User user) {
    redisTemplate.execute(new RedisCallback() {


        @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() {
        @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 Template 대상 을 패키지 하여 redis 에 대한 다양한 작업 을 진행 합 니 다.모든 redis 원생 api 를 지원 합 니 다.RedisTemplate 에서 자주 사용 하 는 인터페이스 방법 을 제공 합 니 다.각각:
 
 
  • private ValueOperations valueOps;
  • private ListOperations listOps;
  • private SetOperations setOps;
  • private ZSetOperations zSetOps;

  •  
     
    RedisTemplate 에서 5 가지 데이터 구조 조작 을 정의 하 였 습 니 다.
     
    redisTemplate.opsForValue();//     
    redisTemplate.opsForHash();//  hash
    redisTemplate.opsForList();//  list
    redisTemplate.opsForSet();//  set
    redisTemplate.opsForZSet();//    set
    StringRedisTemplate RedisTemplate

    이들 의 관 계 는 String RedisTemplate 가 RedisTemplate 를 계승 하 는 것 이다.양자 의 데 이 터 는 서로 통 하지 않 는 다.즉,StringRedisTemplate 는 StringRedisTemplate 의 데이터 만 관리 할 수 있 고,RedisTemplate 는 RedisTemplate 의 데이터 만 관리 할 수 있다.SDR 에서 기본적으로 사용 하 는 직렬 화 전략 은 두 가지 가 있 는데 하 나 는 String 의 직렬 화 전략 이 고 하 나 는 JDK 의 직렬 화 전략 이다.String RedisTemplate 는 기본적으로 String 의 직렬 화 정책 을 사용 합 니 다.저 장 된 key 와 value 는 모두 이 정책 으로 직렬 화 되 어 저 장 됩 니 다. 
    RedisTemplate 는 기본적으로 JDK 의 직렬 화 정책 을 사용 합 니 다.저 장 된 key 와 value 는 모두 이 정책 으로 직렬 화 되 어 저 장 됩 니 다.
     
     
     
    jedis 방식:
    redis.clients.jeds.JedisPool 을 통 해 관리 합 니 다.즉,풀 을 통 해 관리 하고 풀 대상 을 통 해 jedis 인 스 턴 스 를 얻 은 다음 에 jedis 인 스 턴 스 를 통 해 redis 서 비 스 를 직접 조작 하여 업무 와 무관 한 불필요 한 코드 를 제거 합 니 다.예 를 들 어 아래 코드 세 션 과 같 습 니 다.
    private JedisPool jedisPool;
    
    public String save(String key,String val) {
        Jedis jedis = jedisPool.getResource();
        return jedis.set(key, val);
    }

    공장 류 에서 연못 까지 의 방식 변 화 는 my batis 가 my sql 측 변 화 를 연결 하 는 것 과 같 습 니 다.코드 가 더욱 간결 해 지고 유지 도 쉬 워 집 니 다.Jedis 는 apache comons-pool 2 를 사용 하여 Jedis 자원 풀 을 관리 하기 때문에 JedisPool 을 정의 할 때 중요 한 매개 변 수 는 바로 자원 풀 GenericObject PoolConfig 입 니 다.사용 방식 은 다음 과 같 습 니 다.그 중에서 자원 관리 와 사용 하 는 매개 변수 가 많 습 니 다.
     
    매개 변 수 는 JedisPool 이 자원 이 통제 가능 한 범위 내 에 있 고 스 레 드 안전 을 제공 한 다 는 것 을 설명 합 니 다.그러나 합 리 적 인 GenericObject PoolConfig 설정 은 Redis 를 사용 하여 호위 할 수 있 습 니 다.다음은 그의 중요 한 매개 변 수 를 설명 하고 제안 합 니 다.현재 환경 에서 Jedis 연결 은 자원 이 고 JedisPool 이 관리 하 는 것 은 Jedis 연결 입 니 다. 
    1.자원 설정 및 사용
    max Total:자원 탱크 중 가장 대련 연결 수;기본 값:8 설정 은 다음 절 maxIdle:자원 탱크 에서 최대 남 은 연결 수 를 허용 합 니 다.기본 값:8;사용 제안:다음 절 minIdle:자원 탱크 에서 최소한 의 빈 연결 수 를 확보 하 는 것 을 권장 합 니 다.기본 값:0;사용 제안:다음 블록 WhenExhausted:자원 풀 이 다 떨 어 지면 호출 자가 기 다 려 야 하 는 지 설정 합 니 다.true 일 때 만 아래 의 maxWait Millis 가 유효 합 니 다.기본 값:true;사용 제안:기본 값 maxWaitMillis 를 사용 하 는 것 을 권장 합 니 다.자원 풀 연결 이 다 되면 호출 자의 최대 대기 시간(단 위 는 밀리초)-1:시간 을 초과 하지 않 음 을 표시 합 니 다.사용 제안:기본 값 testOnBorrow 를 사용 하 는 것 을 권장 하지 않 습 니 다.자원 풀 에 연결 을 빌 릴 때 연결 유효성 검사(ping)를 할 지 여부 입 니 다.잘못된 연결 은 제 거 됩 니 다.기본 값:false;사용 제안:업 무량 이 많 을 때 false 로 설정 하 는 것 을 권장 합 니 다.testOnReturn:자원 탱크 에 연결 을 반환 할 때 연결 유효성 검사(ping)를 할 지 여부 입 니 다.잘못된 연결 은 제 거 됩 니 다.기본 값:false;사용 제안:업 무량 이 많 을 때 false 로 설정 하 는 것 을 권장 합 니 다.jmxEnabled:jmx 모니터링 을 시작 할 지 여부 입 니 다.모니터링 에 사용 할 수 있 습 니 다.기본 값:true;사용 제안:오픈 을 권장 하지만 응용 자체 도 오픈 해 야 합 니 다. 
    2.남 은 자원 모니터링
    남 은 Jedis 대상 검 측,다음 네 개의 매개 변 수 를 조합 하여 완성 합 니 다.testWhile Idle 은 이 기능 의 스위치 입 니 다.
    testWhile Idle:남 은 자원 모니터링 을 시작 할 지 여부;기본 값:false;사용 제안:true time BetweenEvictionRunsMillis:남 은 자원 의 검 측 주기(단 위 는 밀리초);기본 값:-1:검 측 하지 않 음;사용 제안:권장 설정,주기 자체 선택,기본 값 으로 아래 JedisPoolConfig 의 설정 minEvictable IdleTimeMillis 를 사용 할 수 있 습 니 다.자원 풀 에 있 는 자원 의 최소 남 은 시간(단 위 는 밀리초),이 값 에 도달 하면 남 은 자원 이 삭 제 됩 니 다.기본 값:1000 60 30=30 분;사용 제안:자신의 업무 에 따라 대부분의 기본 값 을 결정 할 수 있 으 며,아래 Jeids PoolConfig 의 설정 을 사용 하 는 것 도 고려 할 수 있 습 니 다.
    numTests PerEvictionRun:남 은 자원 검 사 를 할 때 매번 샘플링 수;기본 값:3;사용 제안:자신의 응용 연결 수 에 따라 미세 조정 할 수 있 습 니 다.-1 로 설정 하면 모든 연결 에 대해 남 은 감 측 을 하 는 것 입 니 다.
     
    그러나 본 논문 과 spring 통합 은 JedisPool 을 직접 사용 하지 않 고 ShardedJedisPool 을 사용 했다.왜 일 까?ShardedJedisPool 은 일치 성 하 시 를 통 해 분포 식 저장 을 실현 할 수 있 기 때문이다.shared 일치 성 하 시 는 다음 과 같은 방안 을 사용 합 니 다.1.Redis 서버 노드 구분:각 서버 노드 를 hash 알고리즘 으로 160 개의 가상 노드(가중치 설정 가능)로 나 누고 가상 노드 를 TreeMap 으로 저장 합 니 다.3.각 Redis 서버 의 물리 적 연결 에 대해 LinkedHashMap 으로 저장 합 니 다.4.Key or KeyTag 에 대해 똑 같은 hash 알고리즘 을 사용 합 니 다.그 다음 에 TreeMap 에서 같은 키 hash 보다 큰 노드 를 얻 고 가장 가 까 운 노드 로 저장 합 니 다.key 의 hash 값 이 가상 노드 hash 보다 클 때 첫 번 째 가상 노드 sharded 가 사용 하 는 hash 알고리즘 을 저장 합 니 다:MD5 와 MurmurHash 두 가지;기본적으로 64 비트 의 MurmurHash 알고리즘 을 사용 합 니 다.

    좋은 웹페이지 즐겨찾기