zoukankan      html  css  js  c++  java
  • redis的list取出数据方式速度测试

    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();
        }
    
    }
  • 相关阅读:
    07spring-mybatis整合
    08ssm三大框架整合
    05spring_AOP
    06spring-test
    03spring初始化销毁自动装配
    04spring注解
    01spring简介入门
    02spring_IoC
    09springmvc_mybatis框架整合
    简单的搭建一个SSH框架
  • 原文地址:https://www.cnblogs.com/libin6505/p/10762161.html
Copyright © 2011-2022 走看看