RedisTemplate使用技巧

RedisTemplate對jedis進行了再一次的封裝。使用起來更加的簡潔方便。但是也是一些問題。比如序列化的問題。在存儲數(shù)據(jù)的時候??赡軙е聉alue值亂碼。或者key亂碼,這是由于redis內(nèi)部的原因;
而在存儲對象的時候。通常我們工程采用第三方工具如FastJson作為轉(zhuǎn)換。為達到序列與反序列一致性。需要對RedisTemplate進行配置

一、配置我們自己的序列化方案,重寫RedisSerializer接口并配置

// 自定義redis存儲數(shù)據(jù)對象序列化。整個工程采用JSON作為序列化工具 
public class ObjectRedisSerializer<T> implements RedisSerializer<T> {

    private final Charset charset;

    public ObjectRedisSerializer() {
        this(StandardCharsets.UTF_8);
    }

    public ObjectRedisSerializer(Charset charset) {
        Assert.notNull(charset, "Charset must not be null!");
        this.charset = charset;
    }

    //序列化 
    @Override
    public byte[] serialize(T t) throws SerializationException {
        String jsonString = JSON.toJSONString(t);
        jsonString.getBytes(this.charset);
        return jsonString.getBytes();
    }

    //反序列化 
    @Override
    public T deserialize(byte[] bytes) throws SerializationException {
        return bytes == null ? null : JSON.parseObject(new String(bytes, this.charset), new TypeReference<T>() {});
    }
}

二、配置RedisTemplate操作

   @Bean
    public RedisTemplate<String, Object> stringSerializerRedisTemplate(@Autowired  RedisTemplate redisTemplate) {
        RedisSerializer<String> stringSerializer = new StringRedisSerializer();
        ObjectRedisSerializer<Object> objectRedisSerializer = new ObjectRedisSerializer<>();
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setValueSerializer(objectRedisSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);
        redisTemplate.setHashValueSerializer(objectRedisSerializer);
        return redisTemplate;
    }
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容