zoukankan      html  css  js  c++  java
  • 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秒

  • 相关阅读:
    通过另外一个应用程序给多个文本框赋值, 模拟单击事件
    AngularJS
    九章算法
    实现继承
    二分查找
    NET Core依赖注入解读&使用Autofac替代实现
    NET SignalR 与 LayIM2.0
    WebVR
    依赖注入
    如何实现配置与源文件的同步
  • 原文地址:https://www.cnblogs.com/wushaopei/p/12283652.html
Copyright © 2011-2022 走看看