码迷,mamicode.com
首页 > 其他好文 > 详细

redis的list取出数据方式速度测试

时间:2019-04-24 14:42:20      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:string   记录   edr   name   nts   out   file   bsp   odi   

 

redis测试:

package business;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import redis.JedisClientSingle;
import redis.clients.jedis.JedisPool;

/**
 * @Package redis
 * @ClassName BusinessTest.java
 * @author libin
 * @date 2019年4月12日 下午2:16:43
 * @version V1.0
 */
public class BusinessTest {

    public static void main(String[] args) throws Exception {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-jedis.xml");
        // JedisPool pool = (JedisPool)
        // applicationContext.getBean("redisClient");
        JedisPool pool = (JedisPool) applicationContext.getBean("jedisPool");
        JedisClientSingle j = new JedisClientSingle(pool);

        // m1(j);
        m5(j,"l2");
//         m3(j,"l5");
//         m4(j,"l5");

    }
//    
//    redis中的list操作命令中删除指定key中的所有记录命令:
//
//    ltrim key 1 0

    //结论:这种取数据的方式还可以接受,不如直接取快lrange
    private static void m5(JedisClientSingle j,String name) throws Exception {
        long t1 = System.currentTimeMillis();
        int i = 0;
        while(true) {
            i++;
            String lpop = j.lpop(name);
            System.out.println(lpop);
            if (lpop==null) {
                System.out.println("取完了");
                break;
            }
        }
        
//        null
//        取完了
//        ------个数:+220001---耗时-------:75990
        System.out.println("------个数:+" + i + "---耗时-------:" + (System.currentTimeMillis() - t1));// 11000条5569
                                                                                                        // ~5550毫秒
    }

    private static void m4(JedisClientSingle j,String name) throws Exception {
        long t1 = System.currentTimeMillis();
        for (int i = 0; i < 20; i++) {
            // 每次插入11000条
            m1(j,name);
        }
//        11000条5569
//        ------个数:+220000---耗时-------:77590
//        ------个数:+220000---耗时-------:78986
//        ------个数:+220000---耗时-------:76039
        System.out.println("------个数:+" + j.llen(name) + "---耗时-------:" + (System.currentTimeMillis() - t1));// 11000条5569
                                                                                                                // ~5550毫秒
    }

    private static void m3(JedisClientSingle j,String name) throws Exception {
        long t1 = System.currentTimeMillis();
        Long len = j.llen(name);
        for (int k = 0; k < len; k++) {
            // 根据角标取
            String s = j.lindex(name, k);
            System.out.println(s);
        }
        // ------个数:+11000---耗时-------:5550  如果20万用这种方式取,要10多个小时
        System.out.println("------个数:+" + len + "---耗时-------:" + (System.currentTimeMillis() - t1));// 11000条5569
                                                                                                        // ~5550毫秒
    }

    //经过测试得出结论:取出数据可以用lrange方法 20万数据都没问题
    private static void m2(JedisClientSingle j,String name) throws Exception {
        long t1 = System.currentTimeMillis();
        // 按照范围取
        List<String> lrange = j.lrange(name, 0, -1);
        for (String string : lrange) {
            System.out.println(string);
        }
        // ------个数:+11000---耗时-------:579
//        ------个数:+220000---耗时-------:25499
//        ------个数:+220000---耗时-------:9950
        System.out.println("------个数:+" + lrange.size() + "---耗时-------:" + (System.currentTimeMillis() - t1));// 11000条529
                                                                                                                // ~700毫秒
    }

    private static void m1(JedisClientSingle j,String name) throws Exception {
        // 处理文件
        long t1 = System.currentTimeMillis();

        // String localFilePath = localTempPath+"/"+fileName;
        String localFilePath = "D:\\a\\c\\haha.txt";

        // 开启固定线程池
        // ExecutorService exec = Executors.newFixedThreadPool(50);
        // 逐行读取本地文件
        List<String> dataList = new ArrayList<String>();

        // File f = new File("D:\\a\\b\\in.txt");
        File f = new File(localFilePath);
        InputStreamReader reader = new InputStreamReader(new FileInputStream(f), "GBK");
        BufferedReader br = new BufferedReader(reader);
        String str = null;
        // 定义计数器
        int i = 0;
        while ((str = br.readLine()) != null) {
            // i的值是从1开始
            i++;
            // 逐条右插入
            // Long len = j.rpush("l1", "l1-"+str);
            Long len = j.rpush(name, name+"-" + str);
            System.out.println(len);
        }
        reader.close();
        br.close();
    }

}

 

redis的list取出数据方式速度测试

标签:string   记录   edr   name   nts   out   file   bsp   odi   

原文地址:https://www.cnblogs.com/libin6505/p/10762161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!