紫郢青索

知之者不如好之者,好之者不如乐之者

用户工具

站点工具


redis lpush命令性能测试

使用redis的列表类型的LPUSH 和 RPOP命令实现队列(左进右出)。 下面是对LPUSH进行了性能测试。

测试环境

  • 系统版本:CentOS release 6.7 (Final)
  • CPU:4核
  • 内存:8G
  • 硬盘:350G
  • redis 版本2.8.3。
  • redis 和 应用在同台服务器。

测试代码

PHP测试

  • PHP版本:5.6.31
  • phpredis扩展版本:3.1.4。

可以参考 Linux安装PHP和Redis扩展

测试代码:

test_redis_lpush.php
<?php
 
/**
 * 计算运行时间类
 * 
 */
class runtime{
    var $StartTime = 0;
    var $StopTime = 0;
 
    function get_microtime(){
        list($usec, $sec) = explode(' ', microtime());
        return ((float)$usec + (float)$sec);
    }
 
    function start(){
        $this->StartTime = $this->get_microtime();
    }
 
    function stop(){
        $this->StopTime = $this->get_microtime();
    }
 
    function spent(){
        return round(($this->StopTime - $this->StartTime) * 1000, 1);
    }
 
}
 
 
// 测试5000条数据
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);
$redis->auth('password');
 
$lpushKey = 'testLpush';
$run_time = new runtime();
$run_time->start();
for($i = 1; $i<=5000; $i++){
    $redis->lPush($lpushKey, "val" . $i);
}
$run_time->stop();
echo "运行时间:".$run_time->spent()."ms";
// 删除队列
$redis->del($lpushKey);

Java测试

Java jdk1.7.0_71,jedis

测试代码:

test_redis_lpush.java
package com.redis;
 
import redis.clients.jedis.*;
 
/**
 * redis 测试类
 * Created by ziying on 2017/10/12.
 */
public class RedisClient {
    private Jedis jedis;//客户端连接
    private JedisPool jedisPool;//连接池
 
    public RedisClient()
    {
        initialPool();
        jedis = jedisPool.getResource();
    }
 
    /**
     * 初始化连接池池
     */
    private void initialPool()
    {
        // 池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(20);
        config.setMaxIdle(5);
        config.setMaxWait(1000l);
        config.setTestOnBorrow(false);
 
        // redis 没有密码
        // jedisPool = new JedisPool(config,"127.0.0.1",6379);
        // redis 有密码
        jedisPool = new JedisPool(config,"127.0.0.1", 6379, 10000, "password");
    }
 
    private void lPush(String key, String val) {
        jedis.lpush(key, val);
    }
 
    private void rPop(String key){
        jedis.rpop(key);
    }
 
    private void del(String key){
        jedis.del(key);
    }
 
    public static void main(String[] args) {
        RedisClient redisClient = new RedisClient();
        String lpushKey = "testLpush";
        //获取开始时间
        long startTime = System.currentTimeMillis();
        for (int i = 1; i<=5000; i++){
            redisClient.lPush(lpushKey, "val_" + i);
        }
        //获取结束时间
        long endTime = System.currentTimeMillis();
        String info = "程序运行时间:" + (endTime - startTime) + "ms";
        redisClient.del(lpushKey);
        //输出程序运行时间
        System.out.println(info);
    }
}

pom文件

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>demos</groupId>
    <artifactId>demos</artifactId>
    <version>1.0-SNAPSHOT</version>
 
    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.1.0</version>
        </dependency>
    </dependencies>
 
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.redis.RedisClient</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

maven 打包 CLI 命令行执行包。

mvn clean package

在项目的target目录下生成demos-1.0-SNAPSHOT.jar,执行代码:

java -jar ./target/demos-1.0-SNAPSHOT.jar

测试结果

PHP

5000条记录平均时间: 324.7ms

Java

5000条记录平均时间: 490ms