1. 程式人生 > 其它 >java陣列---特點,邊界

java陣列---特點,邊界

前言

今天在優化Feed流時發現服務重啟後,初始化資料儲存資料到Redis時異常慢,原來之前用的是單個set命令去做的,早就聽聞Pipeline是redis批量操作的利器,正好這次用Pipeline進行優化;

整合Redis實戰

一、原理分析

1、單個命令操作

2、Pipeline批量操作

二、測試程式碼

    @Overrider
    private RedisTemplate strRedisTemplate;

 
    //單個新增操作
    @RequestMapping(value = "/set/single", method = RequestMethod.GET)
    public void setSingle() {
        for (int i = 0; i < 100; i++) {
            strRedisTemplate.opsForValue().set("single:" + i, "123");
        }
    }

    //批量新增操作
    @RequestMapping(value = "/set/pipeline", method = RequestMethod.GET)
    public void setPipeline() {
        strRedisTemplate.executePipelined(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                for (int i = 0; i < 100; i++) {
                    connection.set(("pipel:" + i).getBytes(), "123".getBytes());
                }
                return null;
            }
        });
    }

    //單個讀取操作
    @RequestMapping(value = "/get/single", method = RequestMethod.GET)
    public void addSingle() {
        for (int i = 0; i < 100; i++) {
            strRedisTemplate.opsForValue().get("single:" + i);
        }
    }


    //批量讀取操作
    @RequestMapping(value = "/get/pipeline", method = RequestMethod.GET)
    public void getPipeline() {
        List<String> list = strRedisTemplate.executePipelined(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                for (int i = 0; i < 100; i++) {
                    connection.get(("pipel:" + i).getBytes());
                }
                return null;
            }
        });
    }

以上程式碼不管set還是get 都需要return null。 另外批量讀取時,返回的List,如果 connection.get 在Redis不存在,則List中會有null值存在。 需要自己去過濾null值。

RedisCallback 和SessionCallback區別

SessionCallback & RedisCallback 的作用都是:讓RedisTemplate進行回撥,通過它們可以在同一條連線下執行多個Redis命令。SessionCalback提供了良好的封裝,優先使用它,RedisCallback稍微複雜一些。

區別:
SessionCallback 可以支援事務