标签:style blog class code java c
由于 Redis 并没有发布 windows 的官方版本,windows 的安装使用不作介绍,只介绍 Linux 下的安装使用。
下载地址:https://github.com/dmajkic/redis/downloads
下载最新版本
然后tar, make,即可。(make前,如果确认自己的测试机是32位linux,在src/Makefile文件中的头部加上CFLAGS=
-march=i686
redis 2.8.9 安装报错
Jimmy 2013-01-21 11:53 zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory zmalloc.h:55:2: error: #error "Newer version of jemalloc required" make[1]: *** [adlist.o] Error 1 make[1]: Leaving directory `/data0/src/redis-2.6.2/src‘ make: *** [all] Error 2
解决办法是: make MALLOC=libc
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory #include <jemalloc/jemalloc.h> ^ compilation terminated. make: *** [adlist.o] Error 1
解决办法还是: make MALLOC=libc
启动 server: 根目录下执行 nohup src/redis-server redis.conf
&
如果端口有冲突改下 redis.conf 里面的 port 配置
启动客户端 src/redis-cli
端口有变化 src/redis-cli -p
6479
测试下
redis 127.0.0.1:6479> set test test OK redis 127.0.0.1:6479> get test "test"
与你熟悉的关系型数据库一致,Redis有着相同的数据库基本概念,即一个数据库包含一组数据。
典型的数据库应用案例是,将一个程序的所有数据组织起来,使之与另一个程序的数据保持独立。
在Redis里,数据库简单的使用一个数字编号来进行辨认,默认数据库的数字编号是0。如果你想切换到一个不同的数据库,你可以使用select命令来实现。在命令行界面里键入select
1
,Redis应该会回复一条OK的信息,然后命令行界面里的提示符会变成类似redis
127.0.0.1:6379[1]>
这样。如果你想切换回默认数据库,只要在命令行界面键入select
0
即可。
为了方便,我们把
redis-server,和 redis-cli 提取出来
[root@localhost local]# mkdir -p redis/bin [root@localhost local]# mkdir -p redis/etc [root@localhost local]# cp /usr/share/redis-2.8.9/src/redis-server /usr/share/redis-2.8.9/src/redis-cli /usr/local/redis/bin/ [root@localhost local]# cp /usr/share/redis-2.8.9/redis.conf /usr/local/redis/etc/
启动 redis-server
[root@localhost src]# ./redis-server [7419] 11 May 18:09:10.311 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf [7419] 11 May 18:09:10.312 * Increased maximum number of open files to 10032 (it was originally set to 1024). _._ _.-``__ ‘‘-._ _.-`` `. `_. ‘‘-._ Redis 2.8.9 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ‘‘-._ ( ‘ , .-` | `, ) Running in stand alone mode |`-._`-...-` __...-.``-._|‘` _.-‘| Port: 6379 | `-._ `._ / _.-‘ | PID: 7419 `-._ `-._ `-./ _.-‘ _.-‘ |`-._`-._ `-.__.-‘ _.-‘_.-‘| | `-._`-._ _.-‘_.-‘ | http://redis.io `-._ `-._`-.__.-‘_.-‘ _.-‘ |`-._`-._ `-.__.-‘ _.-‘_.-‘| | `-._`-._ _.-‘_.-‘ | `-._ `-._`-.__.-‘_.-‘ _.-‘ `-._ `-.__.-‘ _.-‘ `-._ _.-‘ `-.__.-‘ [7419] 11 May 18:09:10.313 # Server started, Redis version 2.8.9 [7419] 11 May 18:09:10.313 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect. [7419] 11 May 18:09:10.314 * The server is now ready to accept connections on port 6379
很明显,这不符合我们的需求,我们需要让他后台打开,
vi /usr/local/redis/etc/redis.conf
将行 daemonize no 改为 daemonize yes
再次执行 redis-server /usr/local/redis/etc/redis.conf
# redis-server /usr/local/redis/etc/redis.conf
我们再登陆测试一下
# redis-cli
redis 127.0.0.1:6479> set test test OK redis 127.0.0.1:6479> get test "test"
到此Redis 安装成功.
import java.util.Date; import redis.clients.jedis.Jedis; public class RedisTest { public static void main(String[] args) { long start = System.currentTimeMillis(); String host = "127.0.0.1"; int port = 6479, timeout = 30000; Jedis jedis = new Jedis(host, port, timeout); for (int i = 1; i <= 500000; i++) { String key = "comppara_" + i; String value = "{param1: " + i + ", param2: " + i + ", param3: " + i + "}"; jedis.set(key, value); } long end = System.currentTimeMillis(); System.out.println(Thread.currentThread().getName() + " insert times " + (end - start)); long s = System.currentTimeMillis(); for (int i = 0; i <= 500000; i++) { String key = "comppara_" + i; jedis.get(key); } long e = System.currentTimeMillis(); System.out.println(Thread.currentThread().getName() + " read times " + (e - s)); } }
C 也不怎么会用,就改的 hiredis 自带的 example.c 示例,编译完了直接执行 ./hiredis-example
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "time.h" #include "hiredis.h" void get_time() { time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); printf ( "\007The current date/time is: %s", asctime (timeinfo) ); } int main(void) { unsigned int j; redisContext *c; redisReply *reply; struct timeval timeout = { 1, 500000 }; // 1.5 seconds c = redisConnectWithTimeout((char*)"127.0.0.1", 6479, timeout); if (c == NULL || c->err) { if (c) { printf("Connection error: %s\n", c->errstr); redisFree(c); } else { printf("Connection error: can‘t allocate redis context\n"); } exit(1); } get_time(); printf("test_bach start"); for (int i = 1; i <= 500000; i++) { redisCommand(c,"SET param_%d {param1:param%d,param2:param%d,param3:param%d,param4:param%d}", i, i, i, i, i); } printf("test_bach end"); get_time(); for (int j = 1; j <= 500000; j++) { redisCommand(c,"GET param_%d", j); } get_time(); return 0; }
测试主机配置:8CPU32G内存,测试结果 C 插入 50W 记录大概在31秒左右,JAVA 34秒左右;读 50W 的速度 C 大概需要 29 s 左右,JAVA 需要 31s 左右。如果是远程机器调用JAVA速度基本跟C相差无几。
标签:style blog class code java c
原文地址:http://www.cnblogs.com/jorcen/p/3721983.html