Redis Linux 安装

由于 Redis 并没有发布 windows 的官方版本,windows 的安装使用不作介绍,只介绍 Linux 下的安装使用。 下载地址:https://github.com/dmajkic/redis/downloads 下载最新版本

然后tar, make,即可。(make前,如果确认自己的测试机是32位linux,在src/Makefile文件中的头部加上 CFLAGS= -march=i686

redis 2.6.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

启动 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 hello
OK
redis 127.0.0.1:6479> get test
"hello"

与你熟悉的关系型数据库一致,Redis有着相同的数据库基本概念,即一个数据库包含一组数据。典型的数据库应用案例是,将一个程序的所有数据组织起来,使之与另一个程序的数据保持独立。 在Redis里,数据库简单的使用一个数字编号来进行辨认,默认数据库的数字编号是0。如果你想切换到一个不同的数据库,你可以使用select命令来实现。在命令行界面里键入select 1,Redis应该会回复一条OK的信息,然后命令行界面里的提示符会变成类似redis 127.0.0.1:6379[1]>这样。如果你想切换回默认数据库,只要在命令行界面键入select 0即可。

Redis 客户端测试

Java 官方推荐客户端 Jedis

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

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相差无几。