下载最新稳定版本redis源码包:
liang@bogon:~/redis3$ wget http://download.redis.io/releases/redis-3.0.5.tar.gz
liang@bogon:~/redis3$ ls
编译安装redis:
下载成功,解压redis源码包
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
安装tcl 8.5支持redis
liang@bogon:~/redis3/redis-3.0.5$ sudo apt-get install tcl
再次测试redis安装是否成功
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
启动redis命令行
liang@bogon:~/redis3/redis-3.0.5$ redis-cli
设置一个键值
127.0.0.1:6379> set joy yes
查询键值joy的值是否为yes
127.0.0.1:6379> get joy
2、C客户端连接redis
下载redis客户端C语言源码包:
安装github下载工具
liang@bogon:~$ sudo apt-get install git
从github下载C客户端源码包
liang@bogon:~$ git clone https://www.github.com/redis/hiredis
编译安装redis客户端:
下载后进入,hredis目录
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
进入examples目录
liang@bogon:~/hiredis$ cd examples/
编译生成一个客户端
liang@bogon:~/hiredis/examples$ gcc example.c -o example -lhiredis
若提示一些如read.h等头文件error,进入hiredis,执行下面命令,重新编译
liang@bogon:~/hiredis$ sudo cp *.h /usr/include/
测试redis客户端功能:
运行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;
}