1、問題描述
使用redisTemplate設置redis的key-value,程序運行沒有問題,但是卻在redis客戶端查不到設置的key-value。
2、產生原因
出現這種亂碼前綴的原因是沒有進行序列化,因此導致在傳輸過程出現亂碼問題。
RedisTemplate類中默認是沒有設置序列化的。
因此需要設置一下RedisTemplate的序列化方式
3、解決方法
設置RedisTemplate的序列化方式
常見的序列化方式
修改后的代碼
@Test
public void testRedis() {
//使用StringRedisSerializer序列化方式(一般如果key-value都是string的話,使用StringRedisSerializer就可以)
RedisSerializer stringSerializer = new StringRedisSerializer();
//key序列化方式
redisTemplate.setKeySerializer(stringSerializer);
//String的序列化方式
redisTemplate.setStringSerializer(stringSerializer);
//value序列化方式
redisTemplate.setValueSerializer(stringSerializer);
//hash key序列化方式
redisTemplate.setHashKeySerializer(stringSerializer);
//hash value序列化方式
redisTemplate.setHashValueSerializer(stringSerializer);
redisTemplate.opsForValue().set("notify:00123456", "2022-01-01");
}
在redis客戶端可以查到了
當然也可以把RedisTemplate序列化配置放到configure里面,做一個全局配置。
package xxx
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* @ClassName RedisConfig
* @Version 1.0
* @Author Wulc
* @Date 2022-01-11 16:41
* @Description 修改redis序列化
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisTemplate redisTemplate) {
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setStringSerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
return redisTemplate;
}
}
4、參考資料
RedisTemplate操作redis時,key值出現\xac\xed\x00\x05t\x00前綴_u011345756的專欄-CSDN博客_\xac\xed\x00\x05t\x00