基本介绍

pipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令。

  • 在原生模式下,

    每执行一次redis命令,都需要经过发送命令(I/O)、执行命令(内存)和返回结果(I/O))三个阶段。

    其中,主要耗时在发送命令与返回结果。

  • 在pipeline模式下,

   一次性执行多条命令,也只需要一次发送命令和一次返回结果。
    节省了大量花费在I/O上的耗时。

pipeline模式的操作时非原子性的,若需要批量操作保持原子性,可以使用redis.call,执行LUA脚本的方式实现

基本使用

使用redisTemplate执行批量查询

/**
     * 执行查询redis
     *
     * @param
     * @param <T>
     */
    public <T> List<T> queryObjectListByKeyList(List<String> keyList, final Class<T> clazz) {

        List<Object> results = stringRedisTemplate.executePipelined(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                for (String key : keyList) {
                    connection.get(key.getBytes());
                }
                return null;
            }
        });

        List<T> resultList = new ArrayList<>();
        for (Object result : results) {
            if (result != null && StringUtils.isNotBlank((String) result)) {
                resultList.add(JSONObject.parseObject((String) result, clazz));
            }
        }
        return resultList;
    }