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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
性能测试 PTS,5000VUM额度
简介:
  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/

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
14天前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
25 3
|
14天前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
19 3
|
14天前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
41 3
|
2月前
|
NoSQL Java Linux
Redis6入门到实战------ 六、Redis_Jedis_测试
这篇文章介绍了如何使用Jedis客户端连接Redis,并进行基本的数据类型操作测试,包括字符串、列表、集合、哈希和有序集合的相关API使用示例。
Redis6入门到实战------ 六、Redis_Jedis_测试
|
2月前
|
NoSQL Java Linux
Jedis测试redis。(redis在linux虚拟机中)
该博客文章提供了使用Jedis客户端连接Linux虚拟机中的Redis服务器的步骤,包括Maven依赖配置、测试用例编写以及测试结果的截图。
|
2月前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
|
2月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
|
4月前
|
存储 缓存 NoSQL
Redis性能测试实操记录与分析
Redis性能测试实操记录与分析
58 3
|
4月前
|
NoSQL Redis 数据安全/隐私保护
连接测试服务器redis
连接测试服务器redis
|
17天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
53 1