Redis 單節點百萬級別數據 讀取 性能測試.


個人博客網:https://wushaopei.github.io/    (你想要這里多有)

這里先進行造數據,向redis中寫入五百萬條數據,具體方式有如下三種:

方法一:(Lua 腳本) vim redis_load.lua

#!/bin/bash
for i = 1, 100000, 1 do
redis.call(“SET”, “ZzZ MYKEY_ZzZ “..i..”key”, i)
end
return “Ok!” 

執行命令: redis-cli —eval redis_load.lua

方法二: (Shell 腳本) vim test.sh

#!/bin/bash
for i in seq 1 100000
do
echo key:${i}=>value:${i}
redis-cli set key:${i} value:${i}
done 

方法三:(debug populate)

127.0.0.1:6379> debug populate 100000
OK 
(9.12s)

查看數據占用的內存大小: 使用info 命令

# Memory
used_memory:531922952       //數據占用了多少內存(字節 byte)
used_memory_human:1.23M     //數據占用了多少內存(帶單位的,可讀性好)
used_memory_rss:20164608    //redis占用了多少內存
used_memory_rss_human:19.23M  
used_memory_peak:531922952        //占用內存的峰 值(字節)
used_memory_peak_human:507.28M   //占用內存的峰值(帶單位的,可讀性好)
total_system_memory:1929056256
total_system_memory_human:1.80G
used_memory_lua:37888         //lua引擎所占用的內存大小(字節)
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.03    //內存碎片率
mem_allocator:jemalloc-3.6.0   //redis內存分配器版本,在編譯時指定的。有libc、jemalloc、tcmalloc這3種。

環境說明:

            Redis 未做任何優化, 單節點    (服務器上, 內存64G).

            數據量 :十萬條  (預先存入到redis中.)

            數據大小: 1.23M (大約十萬條數據)

以下開始讀取操作:

第一種方式: 傳統讀取操作(一次讀所有,內存要大,1G以上就可以滿足基本要求)

        @Test public void batchGetNotUsePipeline() { //指定Redis服務器的IP地址和端口號 Jedis jedis = new Jedis("49.234.197.111", 6379); long start = System.currentTimeMillis(); List<String> list = jedis.lrange("index", 0, 100000); jedis.close(); long end = System.currentTimeMillis(); System.out.println("batchGetNotUsePipeline :讀取數據完成===》 插入數據總條數 size : " + list.size() + " total use:"+(end-start)/1000+ "秒" ); } 

執行結果:

batchGetNotUsePipeline :讀取數據完成===》 插入數據總條數 size : 100000 total use:1秒 2020-01-18 14:02:06.432 INFO 11928 --- [ Thread-2] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'

耗時達到了2秒

方法二:采用pipline 方式:

        @Test public void batchGetUsePipeline() { long start = System.currentTimeMillis(); //指定Redis服務器的IP地址和端口號 Jedis jedis = new Jedis("49.234.197.103", 6379); Pipeline pipelined = jedis.pipelined(); Response<List<String>> list = pipelined.lrange("index", 0, 200000); pipelined.sync(); jedis.close(); long end = System.currentTimeMillis(); System.out.println("batchGetNotUsePipeline :讀取數據完成===》 插入數據總條數 size : " + list.get().size() + " total use:"+(end-start)/1000+ "秒" ); } 

pipeLine批量獲取數據加快接口響應速度 ,使用管道后的速度約等於1秒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM