天天看點

RedisTemplate executePipelined 第二個參數

使用管道的方式存儲資料時,會直接儲存位元組數組,不需要用到序列化的功能

redisTemplate.executePipelined(new RedisCallback<Object>() {
    @Override
    public Object doInRedis(RedisConnection connection) {
        keys.forEach(key -> {
            connection.sAdd(key.getBytes(), "str".getBytes());
        });
        return null;
    }
});      

使用管道的方式讀取資料時,如果隻傳入一個參數,會預設使用定義好的序列化類對結果進行反序列化操作,進而報

org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; 異常。這時候隻要調用管道的兩個參數的重載方法,第二個參數傳入空就不會再反序列化了

List<Set<byte[]>> list = redisTemplate.executePipelined(new RedisCallback<List<Set<byte[]>>>() {
    @Override
    public List<Set<byte[]>> doInRedis(RedisConnection connection) throws DataAccessException {
        connection.openPipeline();
        keys.forEach(key -> {
            connection.sMembers(key.getBytes());
        });
        return null;
    }
}, null);