十分简单的redis使用说明及性能测试

  redis相比很多人都知道,是一个内存式的key-value数据库,存取速度极快,使用非常简单,支持多种语言。本文对其使用进行一个简要说明,并进行简单测试

  1.下载与编译

  可以从redis官网下载最新的源码包:http://www.redis.io/

  编译十分简单make既可。

  2.redis安装与配置

  实际上并不需要安装。redis编译后会在src目录下生成redis-server,它是一个可执行文件,即启动redis服务。不过它需要一个配置文件。配置文件写法网上很多了,这里直接给出一个示例:


daemonize yes

pidfile /tmp/redis/var/redis.pid

port 6379

timeout 300

loglevel debug

logfile /tmp/redis/var/redis.log

databases 16

save 900 1

save 300 10

save 60 10000

rdbcompression yes

dbfilename dump.rdb

dir /tmp/redis/var/

appendonly no

appendfsync always

#glueoutputbuf yes

#shareobjects no

#shareobjectspoolsize 1024

  将其保存为redis.conf

  然后直接运行./redis-server redis.conf就可以启动redis服务了,是不是很方便呢?

  3.C/C++访问redis

  在redis源码目录下有一个deps目录,下面有一个hiredis目录。redis编译时会自动编译该目录生成libhiredis.a,通过引用hiredis.h 和 libhiredis.a就可以访问redis了。具体步骤如下:

  1)创建一个redisContext

  2)通过redisContext执行命令

  3)从返回redisReply中获取所需数据

  代码如下:


<pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp">redisContext *  c = redisConnect((char *)"192.168.150.135",6379);

const char * pData = "this is a test";

<pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp">redisReply *reply1 = (redisReply *)redisCommand(c,"SET 100 %s",pData);

<pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp"><pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp"><pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp">freeReplyObject(reply1);</pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<p></p>

<pre></pre>

<pre></pre>

<br>

<pre code_snippet_id="151033" snippet_file_name="blog_20140110_3_730653" name="code" class="cpp"><pre code_snippet_id="151033" snippet_file_name="blog_20140110_3_730653" name="code" class="cpp"><pre code_snippet_id="151033" snippet_file_name="blog_20140110_3_730653" name="code" class="cpp">redisReply *reply2 = (redisReply *)redisCommand(c,"GET 100");</pre>

<pre></pre>

<pre></pre>

printf("%s\n",reply2->str);<br>

freeReplyObject(reply2);<br>

<pre></pre>

<pre></pre>

<pre></pre>

  是不是非常简单呢?


<p></p>

<p>不过需要注意的是,redis接受的数据是字符串,对于二进制数据,可以通过base64编码来解决。具体可参看我的另一篇文章。</p>

<p></p>

<h1><a name="t3"></a>4.Java访问redis</h1>

<p>redis可以支持多种语言,当然也可以支持Java。</p>

<p>首先需要下载redis的java包。jedis.jar。这里提供一个下载地址:<a target="_blank" href="http://download.csdn.net/detail/jmppok/6834151">redis的Java客户端jedis</a></p>

<p>使用如下:</p>

<p></p>

<pre code_snippet_id="151033" snippet_file_name="blog_20140110_4_2824204" name="code" class="java">Jedis jedis = new Jedis("192.168.150.135");

jedis.set("100","this is a test");

String data = jedis.get("100");

</pre><br>

<br>

<p></p>

<h1><a name="t4"></a>5.性能测试</h1>

<p>测试方法:向redis写一个1M的数据,分别写10次,读10次,计算其耗时。分C++和Java两个版本进行测试。<br>

</p>

<h2><a name="t5"></a>C++测试代码</h2>

<p></p>

<pre code_snippet_id="151033" snippet_file_name="blog_20140110_5_8505805" name="code" class="cpp">#include <stdio.h>

#include "hiredis.h"

#include <string.h>

#include <time.h>

int main(int argc, char **argv)

{

printf("CLOCKS_PER_SEC:%d\n",CLOCKS_PER_SEC);

redisContext *c;

redisReply *reply;

c = redisConnect((char *)"one-60",6379);

char * pData;

reply = (redisReply *)redisCommand(c,"GET 0");

int size = strlen(reply->str);

pData = new char[size+1];

strcpy(pData,reply->str);

freeReplyObject(reply);

clock_t start, finish;

start = clock();

for(int i=0;i<10; i++)

{

reply = (redisReply *)redisCommand(c,"GET %d",i);

freeReplyObject(reply);

}

finish = clock();

double duration = (double)(finish - start) / CLOCKS_PER_SEC*1000;

printf("GET Time used:%f ms.\n",duration);

start = clock();

for(int i=0;i<10; i++)

{

reply = (redisReply *)redisCommand(c,"SET %d %s",i,pData);

freeReplyObject(reply);

}

finish = clock();

duration = (double)(finish - start) / CLOCKS_PER_SEC*1000;

printf("SET Time used:%f ms.\n",duration);

delete []pData;

redisFree(c);

}

</pre>测试结果

<p></p>

<p></p>

<pre code_snippet_id="151033" snippet_file_name="blog_20140110_6_1363508" name="code" class="plain">CLOCKS_PER_SEC:1000000

GET Time used:190.000000 ms.

SET Time used:70.000000 ms.

</pre><br>

<br>

<p></p>

<h2><a name="t6"></a>Java测试代码<br>

</h2>

<p></p>

<pre code_snippet_id="151033" snippet_file_name="blog_20140110_7_633160" name="code" class="java">import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.util.Date;

import redis.clients.jedis.Jedis;

public class JedisTest {

public static void main(String[] args)

{

Jedis jedis = new Jedis("10.100.211.232");

String f = "/tmp/e2.txt.backup";

try

{

File file = new File(f);

BufferedReader reader = new BufferedReader(new FileReader(file));

String data = reader.readLine();

reader.close();

Date start = new Date();

for(int i=0; i<10; i++)

{

jedis.set(i+"", data);

}

Date end = new Date();

System.out.println("Set used(ms):"+(end.getTime()-start.getTime()));

start = new Date();

for(int i=0; i<10; i++)

{

String v = jedis.get(i+"");

}

end = new Date();

System.out.println("Get used(ms):"+(end.getTime()-start.getTime()));

}catch (Exception e)

{

e.printStackTrace();

}

jedis.disconnect();

}

}</pre><br>

  测试结果


<p></p>

<p></p>

<pre code_snippet_id="151033" snippet_file_name="blog_20140110_8_8615272" name="code" class="plain">Set used(ms):1212

Get used(ms):1437</pre><br>

  6.总结


<p></p>

<p>redis效率还是非常高的,读写1M数据的数据,耗时都在10ms左右。<br>

</p>

<p><br>

</p>

<pre></pre>

<pre></pre>

</pre></pre></pre></pre></pre></pre>

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-10 07:07:16

十分简单的redis使用说明及性能测试的相关文章

CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据

1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Redis下载地址:wget http://download.redis.io/releases/redis-2.8.6.tar.gz 2.安装依赖包 yum install -y gcc gcc-c++ readline-devel pcre-devel openssl-devel tcl perl

高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)

源码地址:https://github.com/Tinywan/PHP_Experience 问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis list 仿真实现,而且方便回滚. 问题三:日志量毕竟大,保存最近30条足矣,决定用php写个离线统计和清理脚本. 一.设计数据库表和存储 考虑到log系统对数据库的性能更多一些,稳定性和安全性没有那么高,存储引

云数据库redis版的性能测试

测试环境和命令: 阿里云VPC环境, 4 x (1核, 2G ECS) 用于运行codis proxy codis proxy后端slot均衡的接2个或4个阿里云redis实例 内网SLB连接4个codis proxy 只单纯测试单条读写, 命令如下: ./redis-benchmark -a <auth-passwd> -h <slb-addr> -c 64 -n 500000 -P 100 -r 1048576 -d 256 -t get,set 测试结果: Spec. Val

Strom及DRPC性能测试与改进

参考1:storm性能测试报告 参考2:Storm DRPC 使用 参考3:Storm DRPC 使用及访问C++ Bolt问题的解决方法 参考4:Storm 多语言支持之ShellBolt原理及改进 参考5:Base64编码及编码性能测试 参考6:Base64编码及编码性能测试 [改进] 参考7:zlib使用与性能测试 参考8:十分简单的redis使用说明及性能测试 [参考1]的结论与局限 参考种对Storm性能进行测试,得出了以下结论: storm单条流水线的处理能力大约为20000 tup

在Node.js应用中读写Redis数据库的简单方法

  这篇文章主要介绍了在Node.js应用中读写Redis数据库的简单方法,Redis是一个内存式高速数据库,需要的朋友可以参考下 在开始本文之前请确保安装好 Redis 和 Node.js 以及 Node.js 的 Redis 扩展 -- node_redis 首先创建一个新文件夹并新建文本文件 app.js 文件内容如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var redis = require("redis") ,

在openSUSE-11.1 linux环境下Redis的安装和简单测试

  1. 新建虚拟机,安装openSUSE-11.1 2. 安装后,关闭防火墙,这样ssh才可以连接   SuSEfirewall2 stop 3. ssh连接后,开始安装 redis 进入目录: cd /opt/ 按照官方的说明执行如下 $ wget http://redis.googlecode.com/files/redis-2.4.8.tar.gz $ tar xzf redis-2.4.8.tar.gz $ cd redis-2.4.8 $ make   直接安装报如下错误 linux

Redis——简单介绍

一,简单介绍     Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案.   Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型. Redis可以将数据复制到任意数量的从服务器.   Redis 优势: 异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录. 支持丰富的数据类型:Redis支持最大多数

Redis开发与运维. 3.2 Redis Shell

3.2 Redis Shell Redis提供了redis-cli.redis-server.redis-benchmark等Shell工具.它们虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题. 3.2.1 redis-cli详解 第1章曾介绍过redis-cli,包括-h.-p参数,但是除了这些参数,还有很多有用的参数,要了解redis-cli的全部参数,可以执行redis-cli -help命令来进行查看,下面将对一些重要参数的含义以及使用场景进行说明. 1.?-r -r(

全面剖析Redis Cluster原理和应用 (good)

redis redis cluster注意的问题 : 1.'cluster-require-full-coverage'参数的设置.该参数是redis配置文件中cluster模式的一个参数,从字面上基本就能看出它的作用:需要全部覆盖! 具体点是redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务. redis默认是'yes',即需要全覆盖!建议设置成'no'. 2.阻塞命令产生failover.由于