StringRedisTemplate 와 RedisTemplate 의 차이

3270 단어 springboot
그동안 프로젝트 에서 RedisTemplate 를 사용 해 왔 는데 뒤에 하나 가 발 견 됐 습 니 다.  StringRedisTemplate ,  。。。견문 이 좁다.
String RedisTemplate 는 계승 입 니 다.  RedisTemplate  , RedisTemplate 는 RedisTemplate 로 정의 합 니 다.
String RedisTemplate 는 K,V 를 String 형식의 RedisTemplate 로 한정 한 것 이 아니 라 구조 함수 에 직렬 화 규칙 을 설정 한 것 입 니 다.
,key value 및 hashkey hashValue 의 직렬 화 규칙 은 모두 RedisSerializer.string()입 니 다.
 
public class StringRedisTemplate extends RedisTemplate {

	/**
	 * Constructs a new StringRedisTemplate instance. {@link #setConnectionFactory(RedisConnectionFactory)}
	 * and {@link #afterPropertiesSet()} still need to be called.
	 */
	public StringRedisTemplate() {
		setKeySerializer(RedisSerializer.string());
		setValueSerializer(RedisSerializer.string());
		setHashKeySerializer(RedisSerializer.string());
		setHashValueSerializer(RedisSerializer.string());
	}

	/**
	 * Constructs a new StringRedisTemplate instance ready to be used.
	 *
	 * @param connectionFactory connection factory for creating new connections
	 */
	public StringRedisTemplate(RedisConnectionFactory connectionFactory) {
		this();
		setConnectionFactory(connectionFactory);
		afterPropertiesSet();
	}

	protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {
		return new DefaultStringRedisConnection(connection);
	}
}
 

key,value,hashkey,hashValue 가 모두 String 형식 이 라면 직접 사용 합 니 다.  String Redis Template 면 됩 니 다.
RedisTemplate 기본 정렬 은  defaultSerializer =  JdkSerializationRedisSerializer
              if (enableDefaultSerializer) {

			if (keySerializer == null) {
				keySerializer = defaultSerializer;
				defaultUsed = true;
			}
			if (valueSerializer == null) {
				valueSerializer = defaultSerializer;
				defaultUsed = true;
			}
			if (hashKeySerializer == null) {
				hashKeySerializer = defaultSerializer;
				defaultUsed = true;
			}
			if (hashValueSerializer == null) {
				hashValueSerializer = defaultSerializer;
				defaultUsed = true;
			}
		}

key,value,hashkey,hashValue 직렬 화 규칙 이 설정 되 어 있 지 않 을 때 기본 값 은 JdkSerialization RedisSerializer 입 니 다.redis-cli 에서 볼 때
키 앞 에 문자 가 더 많아 요.   예 를 들 어 이렇게\xac\xed\x00\x05t\\x00\키 를 사용 하기 때문에
RedisTemplate 의 key 서열 화 규칙 과  StringRedisTemplate  다 르 면 키 를 찾 을 수 없다.
보통 프로젝트 에 서 는 String 유형 을 key 로 하 는데 주로 개발 자가 식별 하기 편리 하고 key 의 직렬 화 는 string 직렬 화 를 사용 합 니 다.
이렇게 명령 행 환경 에서 get 조 회 를 할 때 정 의 된 key 문자열 을 직접 사용 하면 값 을 조회 할 수 있 습 니 다.
 
value 에 대해 hashValue 의 직렬 화 는 자체 적 으로 가지 고 있 는 JdkSerialization RedisSerializer 또는 자신 이 먼저 json 문자열 로 직렬 화 한 다음 저장 할 수 있 습 니 다.
그러나 이렇게 하면 get 이나 set 에서 상응하는 변환 작업 을 해 야 한다.전에 RedisTemplate 를 사용 하 는 사람 을 만 났 어 요.
redis 그러나 value 의 직렬 화 방식 은 기본 JdkSerializationRedisSerializer 입 니 다.사실 이 경우 StringRedisTemplate 를 사용 합 니 다.  회 경
네.또한 프로젝트 에서 RedisTemplate 는 보통 하나의 예 로 다른 클래스 에 주입 되 며,RedisTemplate 를 정의 할 때 key value 의 직렬 화 방안 을 생각해 야 합 니 다.
이후 직렬 화 방식 을 바 꾸 면 키 가 찾 지 못 하거나 value 변환 에 오류 가 발생 할 수 있 습 니 다.value 가 실체 대상 이 라면 필드 가 수정 되면 redis 에 미 치 는 영향 을 고려 해 야 합 니 다.
 
 
 
 
 

 
 
 

좋은 웹페이지 즐겨찾기