redis 移植开发

一、redis 简介

1、redis 介绍

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。


2、redis 下载地址

        http://download.redis.io/releases/redis-3.2.3.tar.gz



二、redis 编译

1、解压

tar xf redis-3.2.3.tar.gz -C /home/openlib/


2、编译

cd  /home/openlib/redis-3.2.3

make && make install

编译之后按照的路径默认为  /usr/local/bin/



3、测试redis 服务器

cd  /home/openlib/redis-3.2.3/src/

可以看到编译生成的可执行文件 :

redis-server :redis 服务器

redis-cli :  Redis命令行操作工具

redis-sentinel :是Redis实例的监控管理、通知和实例失效备援服务,是Redis集群的管理工具。在一般的分布式中心节点数据库中,Redis-sentinel的作用是中心节点的工作,监控各个其他节点的工作情况并且进行故障恢复,来提高集群的高可用性。

redis-benchmark:是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能。

redis-check-rdb:  用于检测RDB文件RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照)

redis-check-aof :用于检查AOF文件(AOF 持久化记录服务器执行的所有写操作命令)

redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况。


4、redis-benchmark测试命令事例:

1、redis-benchmark -h 192.168.1.201 -p 6379 -c 100 -n 100000 
100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能 

2、redis-benchmark -h 192.168.1.201 -p 6379 -q -d 100  

测试存取大小为100字节的数据包的性能

3、redis-benchmark -t set,lpush -n 100000 -q

只测试某些操作的性能

4、redis-benchmark -n 100000 -q script load "redis.call('set','foo','bar')"

只测试某些数值存取的性能


5、运行服务器

修改服务器配置文件绑定IP 和端口

vim  ../redis.conf  修改如下:

bind 192.168.17.201
port 6379


运行服务器

./redis-server ../redis.conf


运行客户端
./redis-cli -h 192.168.17.201 -p 6379 

连接上服务器,就可以在客户端用命令进行写入和读取数据



三、移植redis客户端

1、编译客户端

redis 的C客户端源码存放在redis-3.2.3/deps/hiredis 目录下

cd redis-3.2.3/deps/hiredis/ 编译生成库文件

make

可以在当前目录生成:

libhiredis.a  和libhiredis.so 库



2、交叉编译redis

cd  redis-3.2.3/deps/hiredis/ 

修改Makfile 文件,加上如下:

CC =mipsel-linux-gcc


重新编译就可以生成在mips 平台下的库文件



3、redis客户端接口介绍

a.连接hiredis服务器

redisContext *conn = redisConnect("127.0.0.1", 6379); //redis server默认端口

b.发送命令至服务器
redisReply *reply = redisCommand(conn, "set key value");

c.关闭Reply对象
freeReplyObject(reply);


d.关闭连接
redisFree(conn);


4、redis 连接服务器代码(以下代码是用redis-3.2.3/deps/hiredis/examples/example.c)

#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,"%d",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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaopengsun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值