JedisClient의 레디 스는-자치 운영 및 클러스터 에디션

첫째, 치어 파일에 종속성을 추가

<! - https://mvnrepository.com/artifact/redis.clients/jedis -> 
<의존성> 
    <의 groupId> redis.clients </의 groupId> 
    <artifactId를> jedis </ artifactId를> 
    <버전> 3.0.1 < / 버전> 
</ 의존성>

둘째, JedisClient 인터페이스를 준비

공중  인터페이스 JedisClient { 

    문자열 세트 (문자열 키 문자열 값); 
    문자열 GET (문자열 키); 
    부울 (문자열 키) 존재; 
    롱 (문자열 키, 만료 INT 초); 
    긴 TTL (문자열 키); 
    긴 증분 (문자열 키); 
    긴 hset (문자열 키, 문자열 필드, 문자열 값); 
    문자열 hget (문자열 키, 문자열 필드); 
    긴 hdel (문자열 키, 문자열 ... 필드); 
}

셋째, 달성하기 위해

1. 단일 버전

공용 클래스 JedisClientPool는 JedisClient {구현 
	
	@Autowired 
	개인 JedisPool jedisPool을; 

	@Override 
	공개 문자열 세트 (문자열 키 문자열 값) { 
		Jedis jedis jedisPool.getResource = (); 
		문자열 결과 = jedis.set (키 값); 
		jedis.close (); 
		결과를 반환; 
	} 

	@Override 
	공공 문자열 GET (문자열 키) { 
		Jedis jedis = jedisPool.getResource (); 
		문자열 결과 = jedis.get (키); 
		jedis.close (); 
		결과를 반환; 
	} 

	@Override 
	공공 부울 (문자열 키) {존재 
		Jedis jedis = jedisPool.getResource (); 
		부울 결과 = jedis.exists (키); 
		jedis.close ();
		결과를 반환; 
	} 

	@Override 
	공공 롱 (문자열 키, INT 초) {만료 
		Jedis jedis = jedisPool.getResource (); 
		긴 결과 = jedis.expire (키, 초); 
		jedis.close (); 
		결과를 반환; 
	} 

	@Override 
	공공 긴 TTL (문자열 키) { 
		Jedis jedis = jedisPool.getResource (); 
		긴 결과 = jedis.ttl (키); 
		jedis.close (); 
		결과를 반환; 
	} 

	@Override 
	공공 긴 증분 (문자열 키) { 
		Jedis jedis = jedisPool.getResource (); 
		긴 결과 = jedis.incr (키); 
		jedis.close (); 
		결과를 반환; 
	} 

	@Override 
	공공 긴 hset (문자열 키, 문자열 필드, 문자열 값) { 
		Jedis jedis = jedisPool.getResource (); 
		롱 결과 = jedis.hset (키 필드 값); 
		jedis.close (); 
		결과를 반환; 
	} 

	@Override 
	공개 문자열 hget (문자열 키 문자열 필드) { 
		Jedis jedis jedisPool.getResource = (); 
		문자열 결과 = jedis.hget (키 필드); 
		jedis.close (); 
		결과를 반환; 
	} 

	@Override 
	공공 긴 hdel (문자열 키, 문자열 ... 필드) { 
		Jedis jedis = jedisPool.getResource (); 
		긴 결과 = jedis.hdel (키 필드); 
		jedis.close (); 
		결과를 반환; 
	} 

}

  (2) 클러스터 에디션

공용 클래스 JedisClientCluster는 JedisClient {구현 
	
	@Autowired 
	개인 JedisCluster jedisCluster을; 

	@Override 
	공개 문자열 세트 (문자열 키 문자열 값) { 
		jedisCluster.set (키 값)을 리턴; 
	} 

	@Override 
	공공 문자열 GET (문자열 키) { 
		jedisCluster.get (키)를 반환; 
	} 

	@Override 
	공공 부울이 존재 (문자열 키) { 
		jedisCluster.exists (키) 반환; 
	} 

	@Override 
	공공 긴 만료 (문자열 키, INT 초) { 
		jedisCluster.expire (키, 초)을 반환; 
	} 

	@Override 
	공공 긴 TTL (문자열 키) { 
		jedisCluster.ttl (키)를 반환; 
	}

	@Override 
	공공 긴 증분 (문자열 키) { 
		jedisCluster.incr (키) 반환; 
	} 

	@Override 
	공공 긴 hset (문자열 키, 문자열 필드, 문자열 값) { 
		jedisCluster.hset (키, 필드, 값)을 반환; 
	} 

	@Override 
	공공 문자열 hget (문자열 키, 문자열 필드) { 
		jedisCluster.hget (키 필드)을 반환; 
	} 

	@Override 
	공공 긴 hdel (문자열 키, 문자열 ... 필드) { 
		jedisCluster.hdel (키 필드)을 반환; 
	}

  넷째, 구성 파일

<! - 레디 스单机版-> 
	<! - <빈 ID = "jedisPool"클래스 = "redis.clients.jedis.JedisPool"> 
		<생성자 인수 이름 = "호스트"값 = "192.168.206.132"/ >	 
		<생성자 인수 이름 = "포트"값 = "7001"/>	 
	</ 콩> 
	<콩 ID = "jedisClientPool"클래스 = "com.taotao.jedis.JedisClientPool"/> -> 
	<! - 레디 스集群-> 
	<콩 ID = "jedisCluster"클래스 = "redis.clients.jedis.JedisCluster"> 
		<생성자 인수> 
			<설정> 
				<빈 클래스 = "redis.clients.jedis.HostAndPort"> 
					<생성자, 인수 이름 = "호스트"값 = "192.168.206.132"/> 
					<생성자, 인수 이름 = "포트"값 = "7001"/> 
				</ 콩> 
				<빈 클래스 = "redis.clients.jedis.HostAndPort"> 
					<인수 생성자 이름 = "호스트"값 = "192.168.25.132"/>
					<인수 생성자 이름 = "포트"값 = "7002"/> 
				</ 빈> 
				<bean 클래스 = "redis.clients.jedis.HostAndPort"> 
					<인수 생성자 이름 = "호스트"값 = "192.168.25.132 ' /> 
					<생성자 ARG NAME = "포트"값 = "7003"/> 
				</ 빈> 
				<bean 클래스 = "redis.clients.jedis.HostAndPort"> 
					<인수 생성자 이름 = "호스트"값 = "192.168. 206.132 "/> 
					<생성자 ARG NAME ="포트 "값 ="7004 "/> 
				</ 빈> 
				<bean 클래스 ="redis.clients.jedis.HostAndPort "> 
					<인수 생성자 이름 ="호스트 "값 =" 192.168.206.132 "/> 
					<생성자 ARG NAME ="포트 "값 ="7005 "/> 
				</ 콩>
				<bean 클래스 = "redis.clients.jedis.HostAndPort"> 
					<인수 생성자 이름 = "호스트"값 = "192.168.206.132"/> 
					<생성자 ARG NAME = "포트"값 = "7006"/> 
				</ 콩> 
			</ 설정> 
		</ 생성자, 인수> 
	</ 콩> 
	<콩 ID = "jedisClientCluster"클래스 = "com.taotao.jedis.JedisClientCluster"/>

  

다섯 개 테스트

   @Test 
    공개 무효 testJedis는 () { 
        // 초기화 스프링 용기 
        ApplicationContext를 애플리케이션 컨텍스트 ClassPathXmlApplicationContext 새로운 새 = ( "CLASSPATH : 스프링 / 애플리케이션 컨텍스트 - redis.xml"); 
        // 용기 jedisclient에서 오브젝트 얻을 
        JedisClient jedisClient = applicationContext.getBean을 (JedisClient.class ) 
        // JedisClient 동작 레디 스 사용 
        jedisClient.set를 ( "OK", "test666") 
        문자열 jedisClient.get 결과 = ( "OK") 
        에서 System.out.println (결과); 
    }

 여섯, 비즈니스 로직을 추가하면 캐시에

참고 : 일반적인 비즈니스 로직에 영향을주지 않습니다 캐시를 ​​추가

  쿼리 시간에, 기업은 먼저 쿼리 캐시로 이동합니다

  캐시는 데이터베이스 쿼리에없는 경우

  데이터베이스 쿼리에 추가하면 캐시로 결과

  권장되는 데이터 유형 해시

다음 코드 :

공개 목록 <TbContent> getContentList ( CID) {
         // 쿼리 캐시 
        은 try { 
            문자열 JSON = jedisClient.hget (CONTENT_KEY, CID + "" );
             // 여부를 결정 공기 JSON 
            IF (StringUtils.isNotBlank (JSON)) {
                 / / JSON리스트로 변환 
                목록 <TbContent은> 목록 = JsonUtils.jsonToList (JSON은 TbContent. 클래스 )
                 반환 목록; 
            } 
        } 캐치 (예외 E) { 
            e.printStackTrace는 (); 
        } 
        // 쿼리 목록 CID를
        = 예 TbContentExample 새로운 새 TbContentExample ();
         // 검색 조건 설정 
        기준 조건 = example.createCriteria (); 
        criteria.andCategoryIdEqualTo (CID); 
        // 쿼리 실행 
        리스트 <TbContent> 목록 = contentMapper.selectByExample (실시 예)
         // 버퍼 데이터가 추가 
        시도 { 
            jedisClient.hset (CONTENT_KEY, CID + "" , JsonUtils.objectToJson (목록)); 
        } 캐치 (예외 E) { 
            e.printStackTrace (); 
        } 
        반환 목록; 
    }

세븐, 캐시 동기화

  작업에 추가 및 삭제를 할 수있는 정보의 내용 후 바로 해당 캐시를 삭제해야

        // 캐시 동기화 
        jedisClient.hdel (CONTENT_KEY, content.getCategoryId의 toString () ().);

 

추천

출처www.cnblogs.com/wanerhu/p/11241631.html