첫째, 치어 파일에 종속성을 추가
<! - 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 () ().);