liang@bogon:~/redis3$ wget http://download.redis.io/releases/redis-3.0.5.tar.gz liang@bogon:~/redis3$ ls
liang@bogon:~/redis3$ tar zxvf redis-3.0.5.tar.gz liang@bogon:~/redis3/redis-3.0.5$ ls
解压缩后,进入redis源码目录
liang@bogon:~/redis3$ cd redis-3.0.5/ liang@bogon:~/redis3/redis-3.0.5$ ls liang@bogon:~/redis3/redis-3.0.5$ make liang@bogon:~/redis3/redis-3.0.5$ sudo make install
liang@bogon:~/redis3/redis-3.0.5$ make test
You need tcl 8.5 or newer in order to run the Redis test Makefile:211: recipe for target 'test' failed make[1]: *** [test] Error 1 make[1]: Leaving directory '/home/liang/redis3/redis-3.0.5/src' Makefile:6: recipe for target 'test' failed make: *** [test] Error 2
liang@bogon:~/redis3/redis-3.0.5$ sudo apt-get install tcl
liang@bogon:~/redis3/redis-3.0.5$ make test
不再提示需要依赖,redis可以正常运行了
redis的配置文件在redis-3.0.5目录下的redis.conf,不指定配置文件redis使用默认配置
在配置文件可以设置port、pidfile、daemonize、bind等等配置项
测试redis功能:
启动redis服务器liang@bogon:~/redis3/redis-3.0.5$ src/redis-server
liang@bogon:~/redis3/redis-3.0.5$ redis-cli
127.0.0.1:6379> set joy yes
127.0.0.1:6379> get joy
liang@bogon:~$ sudo apt-get install git
liang@bogon:~$ git clone https://www.github.com/redis/hiredis
liang@bogon:~$ cd hiredis/ liang@bogon:~/hiredis$ make liang@bogon:~/hiredis$ sudo make install
拷贝库文件到系统默认的库目录
liang@bogon:~/hiredis$ sudo cp libhiredis.so /usr/lib
sudo idconfig
liang@bogon:~/hiredis$ cd examples/
liang@bogon:~/hiredis/examples$ gcc example.c -o example -lhiredis
liang@bogon:~/hiredis$ sudo cp *.h /usr/include/
运行example
liang@bogon:~/hiredis/examples$ ./example
出现下面结果,即C客户端操作redis成功
PING: PONG SET: OK SET (binary API): OK GET foo: hello world INCR counter: 1 INCR counter: 2 0) element-9 1) element-8 2) element-7 3) element-6 4) element-5 5) element-4 6) element-3 7) element-2 8) element-1 9) element-0
然后就可以开始真正的用C编写操作redis数据库了,最后附上example.c源码,在hiredis目录也有
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <hiredis.h> int main(int argc, char **argv) { unsigned int j; redisContext *c; redisReply *reply; const char *hostname = (argc > 1) ? argv[1] : "127.0.0.1"; int port = (argc > 2) ? atoi(argv[2]) : 6379; struct timeval timeout = { 1, 500000 }; // 1.5 seconds c = redisConnectWithTimeout(hostname, port, 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); } /* PING server */ reply = redisCommand(c,"PING"); printf("PING: %s\n", reply->str); freeReplyObject(reply); /* Set a key */ reply = redisCommand(c,"SET %s %s", "foo", "hello world"); printf("SET: %s\n", reply->str); freeReplyObject(reply); /* Set a key using binary safe API */ reply = redisCommand(c,"SET %b %b", "bar", (size_t) 3, "hello", (size_t) 5); printf("SET (binary API): %s\n", reply->str); freeReplyObject(reply); /* Try a GET and two INCR */ reply = redisCommand(c,"GET foo"); printf("GET foo: %s\n", reply->str); freeReplyObject(reply); reply = redisCommand(c,"INCR counter"); printf("INCR counter: %lld\n", reply->integer); freeReplyObject(reply); /* again ... */ reply = redisCommand(c,"INCR counter"); printf("INCR counter: %lld\n", reply->integer); freeReplyObject(reply); /* Create a list of numbers, from 0 to 9 */ reply = redisCommand(c,"DEL mylist"); freeReplyObject(reply); for (j = 0; j < 10; j++) { char buf[64]; snprintf(buf,64,"%u",j); reply = redisCommand(c,"LPUSH mylist element-%s", buf); freeReplyObject(reply); } /* Let's check what we have inside the list */ reply = redisCommand(c,"LRANGE mylist 0 -1"); if (reply->type == REDIS_REPLY_ARRAY) { for (j = 0; j < reply->elements; j++) { printf("%u) %s\n", j, reply->element[j]->str); } } freeReplyObject(reply); /* Disconnects and frees the context */ redisFree(c); return 0; }