redis
来源:互联网 发布:数据采集器作用 编辑:程序博客网 时间:2024/06/07 02:33
转载请注明出处:http://blog.csdn.net/jmppok/article/details/18085181
将其保存为redis.conf
然后直接运行./redis-server redis.conf就可以启动redis服务了,是不是很方便呢? 是不是非常简单呢?
不过需要注意的是,redis接受的数据是字符串,对于二进制数据,可以通过base64编码来解决。具体可参看我的另一篇文章。
4.Java访问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-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中获取所需数据
代码如下:
- redisContext * c = redisConnect((char *)"192.168.150.135",6379);
- const char * pData = "this is a test";
- redisReply *reply1 = (redisReply *)redisCommand(c,"SET 100 %s",pData);
- freeReplyObject(reply1);
- redisReply *reply2 = (redisReply *)redisCommand(c,"GET 100");
- printf("%s\n",reply2->str);
- freeReplyObject(reply2);
不过需要注意的是,redis接受的数据是字符串,对于二进制数据,可以通过base64编码来解决。具体可参看我的另一篇文章。
4.Java访问redis
redis可以支持多种语言,当然也可以支持Java。
首先需要下载redis的java包。jedis.jar。这里提供一个下载地址:redis的Java客户端jedis
使用如下:
- Jedis jedis = new Jedis("192.168.150.135");
- jedis.set("100","this is a test");
- String data = jedis.get("100");
5.性能测试
测试方法:向redis写一个1M的数据,分别写10次,读10次,计算其耗时。分C++和Java两个版本进行测试。
C++测试代码
- #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);
- }
- CLOCKS_PER_SEC:1000000
- GET Time used:190.000000 ms.
- SET Time used:70.000000 ms.
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();
- }
- }
- Set used(ms):1212
- Get used(ms):1437
6.总结
redis效率还是非常高的,读写1M数据的数据,耗时都在10ms左右。
0 0
- Redis
- redis
- Redis
- redis
- Redis
- redis
- Redis
- redis
- REDIS
- Redis
- Redis
- redis
- Redis
- Redis
- Redis
- Redis
- Redis
- Redis
- iOS 属性传值失败原因
- 收集整理比较全 shell sed 命令与实例教程
- 关于ajax ,json
- hdu 4970 Killing Monsters
- 深入java虚拟机(四)——java虚拟机的垃圾回收机制
- redis
- Jmeter JDBC Request--sqlserver JDBC驱动配置相关
- ArcGIS教程:3D Analyst 基本词汇
- rzsz的安装
- 关于简历要点总结
- Android 系统稳定性之ANR
- 远程桌面不能复制粘贴文本的解决办法
- 深入java虚拟机(五)——java本地接口JNI详解
- 在树莓派上安装OpenCV视觉库