SpringのRedisTemplateに格納されているkeyとvalueには特殊文字の問題があります

1350 ワード

Springのspring-data-redisパッケージの下にRedisTemplateクラスがあります.呼び出し時:
redisTemplate.opsForValue().set("TEST","ABCD");

メソッドの後、Redisに実際に保存されているkeyは、私たちが予め設定したkey値に完全に等しいのではなく、key値の前に特殊な文字を追加します.
"\xac\xed\x00\x05t\x00\x0cTEST"
保存されたvalueは次のようになります.
"\xac\xed\x00\x05t\x00\x10cABCD"
冒頭にはxacxedx 00x 05 tx 00x 0 cのような特殊文字があります.
 
この特殊文字が登場した理由は、RedisTemplateがJdkSerializationRedisSerializerをシーケンス化ツールとしてデフォルトで使用しているためです.
保存されたkeyは私たちが想像していたのとは違いますが、呼び出しには影響しません.
redisTemplate.opsForValue().get("TEST");

前に設定したvalueを取得し、得られたvalueも正しいので、特殊文字は付きません.
これは,RedisTemplateがクエリ用のkey値を同じシーケンス化してクエリを行うため,そのレコードを見つけることができ,valueを逆シーケンス化して返すことで,特殊文字のないvalueが得られるはずである.
 
保存したkeyとvalueにこの特殊な文字を含めたくない場合は、次のコードを使用してシーケンス化方法を手動で変更できます.
@Autowired(required = false)
public void setRedisTemplate(RedisTemplate redisTemplate) {
    RedisSerializer stringSerializer = new StringRedisSerializer();
    redisTemplate.setKeySerializer(stringSerializer);
    redisTemplate.setValueSerializer(stringSerializer);
    redisTemplate.setHashKeySerializer(stringSerializer);
    redisTemplate.setHashValueSerializer(stringSerializer);
    this.redisTemplate = redisTemplate;
}

メソッドの前の@Autowired注記は追加する必要があります.
 
以上