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();
    }

}

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

时间: 2024-10-10 19:57:30

redis的list取出数据方式速度测试的相关文章

Redis各种数据结构性能数据对比和性能优化实践

很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. Redis各种数据结构性能数据对比 测试工具:perf4j 性能指标:平均值,最小值,最大值,方差 对比将814条数据按单条插入到哈希MAP和哈希SET: 对比从814条数据的哈希MAP和哈希SET中判断一个元素是否存在(map的hasKey和set的isMember): 大量数据插入哈希MAP,运

redis 持久化的两种方式

一:快照模式 或许在用Redis之初的时候,就听说过redis有两种持久化模式,第一种是SNAPSHOTTING模式,还是一种是AOF模式,而且在实战场景下用的最多的 莫过于SNAPSHOTTING模式,这个不需要反驳吧,而且你可能还知道,使用SNAPSHOTTING模式,需要在redis.conf中设置配置参数,比如下面这样: # Save the DB on disk: # # save <seconds> <changes> # # Will save the DB if b

OI常用读入方式效率测试

我来填坑了. 这次我用自己写的测试读入的程序来分别测试cin(不关闭流同步),scanf和读入优化的效率差别. 我们分别对三个阶段的数据量n进行测试,通过时间比对来观察性能的差异. n = 102时 n = 104时 n = 105时 为了保证测试准确并且减小偶然误差,本次测试的所有数据均为随机数. 对于每一个数据量连续测试五组不同的随机数,取平均值作为参考. 随机数生成器: 1 #include<cstdio> 2 #include<ctime> 3 #include<cs

Redis学习总结(1)——数据持久化

以前研究Redis的时候,很多东西都不太明白,理解得也不太深,现在有时间重新拾起来看看,将一些心得记录下来,希望和大家一起探讨. 一.简介 Redis是一个单线程高可用的Key-Value存储系统,和Memcached类似,但是实际使用上最大的区别有两方面: Redis支持多种数据结构类型的value,比如string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型): Memcached在出现系统瘫痪的情况下,无法实现系统恢复,而

redis持久化的两种方式

Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为"半持久化模式"):也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为"全持久化模式"). 由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据.redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids

Redis为什么使用单进程单线程方式也这么快

[转] http://www.syyong.com/db/Redis-why-the-use-of-single-process-and-single-threaded-way-so-fast.html Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写.官方提供的数据是可以达到100000+的qps.这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached差. Redis快的主要原因是: 完全基于内存 数据结构简单,对数据操作也简单 使用多路 I/O

转载:测试用例的书写方式及测试模板

测试用例的书写方式及测试模板大全 一个优秀的测试用例,应该包含以下信息: 1 ) 软件或项目的名称 2 ) 软件或项目的版本(内部版本号) 3 ) 功能模块名 4 ) 测试用例的简单描述,即该用例执行的目的或方法 5 ) 测试用例的参考信息(便于跟踪和参考) 6 ) 本测试用例与其他测试用例间的依赖关系 7 ) 本用例的前置条件,即执行本用例必须要满足的条件,如对数据库的访问权限 8 ) 用例的编号( ID ),如可以是 软件名称简写 - 功能块简写 -NO. . 9 ) 步骤号.操作步骤描述.

PHP操作Memcached的各种数据方式

首先,在实现所说的东西之前,要先确定好这么三件事: 1:安装了Memcached. 2:Memcached支持自己php所用版本. 3:开启了Memcached服务,并打开了php.ini的Memcached模块 如说上述条件都满足了,那么我就说一下如何去用php操作: 为了较为清晰的说明,而且空说无凭,所以我统一在下面的额代码里面加入测试,其中包括了我的所有测试过程: 还要说一下,这里主要测试的是数据的CURD操作. <?php //Memcached是面向对象来操作的 $mem=new Me

Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题

//php中的数组数据格式 Array ( [all] => Array ( [title] => ALL [room_promotion_id] => all ) [best_available_rate] => Array ( [title] => Best Available Rate [room_promotion_id] => best_available_rate ) [30] => Array ( [room_promotion_id] =>