redis百萬級資料存取
阿新 • • 發佈:2021-07-08
Jedis jedis0 = new Jedis("localhost", 6379); jedis0.auth("123456"); Pipeline pipelined = jedis0.pipelined(); Set<String> keys = jedis0.keys("batch*"); for (String key:keys){ pipelined.get(key); } List<Object> objects = pipelined.syncAndReturnAll(); long l1 = System.currentTimeMillis(); for (Object src:objects){ System.out.println(src); } long l2 = System.currentTimeMillis(); System.out.println("耗時:"+(l2-l1)+"ms"); } 使用Pipeline百萬級資料7 Jedis jedis0 = new Jedis("localhost", 6379); jedis0.auth("123456"); long l1 = System.currentTimeMillis(); for (int i = 0; i < 1000000; i++) { jedis0.get("batch" + i); } long l2 = System.currentTimeMillis(); System.out.println("耗時:" + (l2 - l1) + "ms"); 普通get去獲取耗時:耗時:48622ms 前提redis版本要支援快取,redis原始碼每次快取8192個位元組, # client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>超過這個限制直接斷開連線,不然存了 client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60
obl:輸出快取區長度
oll: 使用快取的數量
omen:obl和oll佔用的內記憶體
使用時要控制記憶體,因為使用Pipeline即使用本地客戶端記憶體,也用服務端記憶體,適合用實施性不高的場景
一點點學習,一絲絲進步。不懈怠,才不會被時代淘汰