Spring-data-redis는 "SDR"이라고 하는 spring-data 모듈의 redis 지원 부분입니다. 이는 jedis 클라이언트 API 및 실제로 jedis와의 통합을 기반으로 하는 높은 수준의 캡슐화를 제공합니다. 클라이언트는 충분히 간단하고 가볍지만 spring-data-redis는 "과도하게 설계"된 것으로 의심됩니다.
jedis 클라이언트는 프로그래밍 구현 시 다음과 같은 단점이 있습니다.
1) 연결 관리 자동화가 부족하고 연결 풀 설계에 필요한 컨테이너 지원이 부족합니다.
2) 데이터 작업에서는 "직렬화"/"역직렬화"에 주의해야 합니다. jedis의 클라이언트 API에서 허용하는 데이터 유형은 문자열과 바이트이고 구조화된 데이터(json, xml, pojo) 작업에는 추가 지원이 필요하기 때문입니다.
3) 트랜잭션 작업은 순전히 하드 코딩됩니다.
4) pub/sub 기능에는 필요한 디자인 패턴 지원이 부족하여 개발자에게 너무 많은 주의가 필요합니다.
1. Redis 사용 시나리오
Redis는 ANSI C 언어로 작성된 오픈 소스 로그 유형의 Key-Value 데이터베이스로, 네트워크를 지원하고 메모리 기반 및 영속성이 가능하며 여러 언어로 API를 제공합니다.
우리 모두는 일상적인 애플리케이션에서 데이터베이스 병목 현상이 발생할 가능성이 가장 높다는 것을 알고 있습니다. 대용량 데이터와 잦은 쿼리로 인해 디스크 IO 성능의 한계로 인해 프로젝트의 성능이 점점 저하되고 있습니다.
현재 메모리 기반 캐싱 프레임워크는 많은 문제를 해결할 수 있습니다. 예를 들어 Memcache, Redis 등이 있습니다. 자주 사용하는 데이터 중 일부를 읽기 위해 캐시에 저장하면 데이터베이스의 부담이 크게 줄어듭니다. 시스템 성능이 향상되었습니다. 실제로 hibernate와 Mybatis의 2차 캐시도 마찬가지이다. 메모리의 고속 읽기 및 쓰기 속도를 활용해 하드디스크의 병목 현상을 해결해보세요.
2. redis
구성 및 사용 applicationContext-dao.xml의 구성은 다음과 같습니다:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
~ ~ ~ ~ ~ ~ ~
> ~ ~ ~
콩>
콩>
콩>
콩>
데이터베이스.속성配置文件如下:
redis.maxIdle=10
redis.maxActive=20
redis.maxWait=10000
redis.testOnBorrow=true
redis.host=192.168.1.76
redis.port=6379
redis.pass=password1
spring-data-redis提供了多种serializer策略,这对使usejedis의 开发者而言,实在是不常便捷。sdr提供了4种内置의 직렬화기:
JdkSerializationRedisSerializer: 使用JDK적 序列化 Hand段(serialized接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储,POJO对象的存取场景,使用JDK本身序列化机机算将pojo类通过ObjectInputStream/ObjectOutputStream进行序列化操작작,最终redis-server中将存储字节序列,是目前最常用序列化策略。
StringRedisSerializer: 字符串编码, 数据以string存储, Key或者value为字符串的场景, 根据指成string, 是“new String(bytes, charset)” and “string. getBytes( charset)”을 사용하여 데이터를 표시합니다.
JacksonJsonRedisSerializer: json 형식 저장소인 jackson-json 도구는 javabean과 json 간의 변환 기능을 제공합니다. pojo 인스턴스를 json 형식으로 직렬화하고 이를 redis에 저장하거나 json 형식 데이터를 pojo 인스턴스로 변환할 수 있습니다. Jackson 도구는 직렬화 및 역직렬화 시 클래스 유형을 명시적으로 지정해야 하기 때문에 이 전략은 캡슐화하기가 약간 더 복잡합니다. [jackson-mapper-asl 도구 지원 필요]
OxmSerializer: javabeans를 xml로 변환하는 기능을 제공하는 xml 형식 저장소. 현재 사용 가능한 타사 지원에는 jaxb가 포함되며 apache-xmlbeans는 xml 도구입니다. 그러나 이 전략을 사용하면 프로그래밍이 더 어려워지고 효율성도 떨어지므로 권장되지 않습니다. [spring-oxm 모듈 지원 필요]
그중 JdkSerializationRedisSerializer와 StringRedisSerializer는 가장 기본적인 직렬화 전략입니다. 그 중 "JacksonJsonRedisSerializer"와 "OxmSerializer"는 문자열 저장소를 기반으로 하므로 보다 "고급" 직렬화입니다(결국 문자열 구문 분석을 사용하고 Java 개체를 구성합니다). JdkSerializationRedisSerializer 및 StringRedisSerializer는 "직렬화 및 직렬화"를 위한 가장 기본적인 전략입니다. 원칙적으로 애플리케이션 액세스 및 구문 분석을 위해 모든 형식으로 데이터를 저장할 수 있지만(애플리케이션에는 앱, hadoop 및 기타 도구가 포함됨) "를 사용하는 것은 여전히 권장되지 않습니다. JacksonJsonRedisSerializer" 및 "OxmSerializer"는 디자인 타임에 직접 생성됩니다. json이든 xml이든 그 자체는 여전히 문자열이기 때문입니다. 데이터를 타사 도구로 구문 분석해야 하는 경우 데이터는 JdkSerializationRedisSerializer 대신 StringRedisSerializer를 사용해야 합니다.
RedisTemplate에서는 4가지 유형의 직렬 변환기를 선언해야 하며 기본값은 "JdkSerializationRedisSerializer"입니다.
1) keySerializer: 일반적인 K-V 연산에서 키가 채택한 직렬화 전략
2) valueSerializer: 값이 채택한 직렬화 전략
3) hashKeySerializer: 해시 데이터 구조에서 해시-키의 직렬화 전략
4) hashValueSerializer: Hash -값 직렬화 전략
어쨌든 키/해시키에는 StringRedisSerializer를 사용하는 것이 좋습니다.
spring-data-redis는 jedis에 다음 기능을 제공합니다:
1 고도로 캡슐화된 "RedisTemplate" 클래스를 제공하는 연결 풀의 자동 관리
2. jedis 클라이언트의 수많은 API가 분류되어 캡슐화되어 있으며 동일한 유형의 작업이 작업 인터페이스에 캡슐화되어 있습니다
ValueOperations: 간단한 K-V 작업
SetOperations: 유형 데이터 연산 설정
ZSetOperations: zset 유형 데이터 작업
HashOperations: 지도 유형에 대한 데이터 작업
ListOperations: 목록 유형에 대한 데이터 작업
3. 키에 대한 "바운드"(바인딩) 편리한 작업 API를 제공합니다. 바인딩을 통해 지정된 키를 캡슐화한 다음 키를 다시 "명시적으로" 지정하지 않고 일련의 작업을 수행할 수 있습니다. 즉, BoundKeyOperations:
BoundValueOperations
BoundSetOperations
BoundListOperations
BoundSetOperations
BoundHashOperations
3. RedisTemplate 사용
템플릿 클래스로서 연결 및 트랜잭션을 직접 유지하지 않고도 Redis를 빠르게 사용할 수 있는 많은 API를 제공합니다. 처음에 내가 만든 BaseRedisDao는 이 클래스에서 상속되었습니다. 상속의 장점은 각 Dao에서 직렬 변환기를 자유롭게 제어할 수 있고 트랜잭션이 필요한지 여부를 먼저 이해할 필요 없이 현재 구성 방법을 따르면 된다는 것입니다. 템플릿은 다양한 데이터 유형의 Redis를 작동하는 데 사용되는 valueOperation, HashOperation, ListOperation, SetOperation 등과 같은 일련의 작업을 제공합니다. 또한 RedisTemplate은 RedisTemplate을 통해 해당 작업을 직접 주입하는 데 사용되는 해당 *OperationsEditor도 제공합니다.
핵심 코드:
패키지 com.npf.dao.impl;
java.util.ArrayList 가져오기
java.util.List 가져오기
java.util.Map 가져오기
java.util.Map.Entry 가져오기
javax.annotation.Resource 가져오기
org.springframework.beans.factory.annotation.Autowired 가져오기
org.springframework.data.redis.core.HashOperations 가져오기
org.springframework.data.redis.core.RedisTemplate 가져오기
org.springframework.stereotype.Repository 가져오기
com.npf.dao.StudentDao 가져오기;
import com.npf.model.Student;
@Repository
공개 클래스 StudentDaoImpl은 StudentDao를 구현합니다.{
@Autowired
비공개 RedisTemplate
@Resource(name="redisTemplate")
비공개 HashOperations
공개 정적 최종 문자열 학생 = "학생";
@Override
public void save(학생 학생) {
opsForHash.put(STUDENT, student.getId(), 학생);
}
@Override
공개 학생 찾기(문자열 ID) {
학생 학생 = opsForHash.get(STUDENT, id);
복학생;
}
@Override
공개 무효 삭제(문자열 ID) {
opsForHash.delete(학생, ID);
}
@Override
공개 무효 업데이트(학생 학생) {
opsForHash.put(STUDENT, student.getId(), 학생);
}
@Override
공개 목록<학생> findAll() {
지도<문자열, 학생> 항목 = opsForHash.entries(STUDENT);
목록 stuList = new ArrayList
for(Entry
stuList.add(entry.getValue());
}
stuList를 반환합니다.
}
}
控system层代码如下:
패키지 com.npf.controller;
import java.util.List;
java.util.UUID 가져오기;
import org.springframework.beans.factory.annotation.Autowired;
org.springframework.stereotype.Controller 가져오기;
org.springframework.ui.Model 가져오기;
org.springframework.web.bind.annotation.RequestMapping 가져오기;
import org.springframework.web.bind.annotation.RequestParam;
import com.npf.model.Student;
com.npf.service.StudentService 가져오기;
@컨트롤러
공개 클래스 StudentController {
@Autowired
개인 StudentService 학생 서비스;
@RequestMapping("/학생/저장")
public String saveStudent(학생 학생){
문자열 ID = UUID.randomUUID().toString();
System.out.println(id);
Student.setId(id);
StudentService.save(학생);
return 'redirect:/student/find/all';
}
@RequestMapping("/학생/업데이트")
public String updateStudent(학생 학생){
StudentService.update(학생);
return 'redirect:/student/find/all';
}
@RequestMapping("/student/to/save/form")
공개 문자열 toSaveStudentForm(){
'저장'을 반환합니다.
}
@RequestMapping("/student/delete")
public String deleteStudent(@RequestParam("id") String id){
StudentService.delete(id);
return 'redirect:/student/find/all';
}
@RequestMapping("/student/to/update/form")
public String toUpdateStudentForm(@RequestParam("id") String id,Model model){
학생 stu = studentService.find(id);
model.addAttribute("stu", stu);
'업데이트'를 반환합니다.
}
@RequestMapping("/student/find/all")
public String findStudents(모델 모델){
목록 stuList = studentService.findAll();
model.addAttribute("stuList", stuList);
'목록'을 반환합니다.
}
}
위 내용은 Redis를 구성하고 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!