linux下redis資料庫的簡單使用

來源:互聯網
上載者:User

標籤:

一、redis簡介

  Redis是一個key-value儲存系統。和 Memcached類似,但是解決了斷電後資料完全丟失的情況,而且她支援更多無化的value類型,除了和string外,還支援lists(鏈表)、 sets(集合)和zsets(有序集合)幾種資料類型。這些資料類型都支援push/pop、add/remove及取交集並集和差集及更豐富的操作, 而且這些操作都是原子性的。

二、redis的安裝

首先從在官網下載redis源碼安裝包,:https://github.com/antirez/redis.git

目前最新分支為3.2

1 git clone -b 3.2  https://github.com/antirez/redis.git

下載完成之後進入redis目錄,編譯安裝直接是

make

make install

編譯安裝完成直接運行

redis-server就可以啟用redis服務,可以用netstat命令查看redis監聽的連接埠(預設是6379)

redis服務起來之後我就可以進行相應的測試看資料庫是否安裝成功:

在命令列輸入redis-cli啟用redis用戶端:

輸入一下命令測試redis是否安裝成功

127.0.0.1:6379> pingPONG127.0.0.1:6379> set test helloOK127.0.0.1:6379> get test"hello"127.0.0.1:6379>


更多redis命令請參考redis命令手冊,這上面詳細介紹了redis-cli各種命令的用法

http://doc.redisfans.com/

至此,redis資料庫安裝完成

三、redis c 介面庫的安裝

  Redis 是一個高效能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部 分場合可以對關聯式資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等用戶端,使用很方便

  在這裡簡單介紹一下redis的C介面庫:

hiredis是redis的C介面庫,使用之前我們要先下載安裝hiredis,:https://github.com/redis/hiredis.git

git clone https://github.com/redis/hiredis.git


下載之後進入hiredis目錄

make

make install

下面進行hredis庫中幾個常用函數介紹

(1)redisConnect函數

該函數用於串連redis資料庫

函數原型:

1  redisContext *redisConnect(const char *ip, int port);2 //說明:該函數用來串連redis資料庫,參數為資料庫的ip地址和連接埠,一般redis資料庫的連接埠為6379該函數返回一個結構體redisContext。

redisContext結構體定義如下:

 1 /* Context for a connection to Redis */ 2 typedef struct redisContext { 3     int err; /* Error flags, 0 when there is no error */ 4     char errstr[128]; /* String representation of error when applicable */ 5     int fd;  6     int flags; 7     char *obuf; /* Write buffer */ 8     redisReader *reader; /* Protocol reader */ 9 10     enum redisConnectionType connection_type;11     struct timeval *timeout;12 13     struct {14         char *host;15         char *source_addr;16         int port;17     } tcp;18 19     struct {20         char *path;21     } unix_sock;22 23 } redisContext;

(2)redisCommand函數

該函數用於執行redis的命令;

函數原型:

1 void *redisCommand(redisContext *c, const char *format, ...);2 /*說明:該函數執行命令,就如sql資料庫中的SQL語句一樣,只是執行的是redis資料庫中的操作命令,3 第一個參數為串連資料庫時返回的redisContext,4 後面為可變參數列表,跟C語言printf函數類似,5 傳回值為void*,一般強制轉換成為redisReply類型的進行進一步的處理。*/

用法:

redisReply *reply = (redisReply*)redisCommand(c,   cmd);

(3)redisRelpyObject函數

還函數用於釋放redisCommand傳回值redisReply所佔用的記憶體

1 /* Free a reply object */2 void freeReplyObject(void *reply)3 //該函數用於回收釋放redisCommand傳回值redisReply所佔用的記憶體

(4)redisFree函數

該函數用於釋放一個redis資料庫的串連

1 void redisFree(redisContext *c)2 //用於釋放redisConnect產生的串連

下面寫一個簡單的hredis c介面的redis測試程式:

#include <stdio.h>#include <string.h>#include <stddef.h>  #include <stdarg.h>  #include <string.h>  #include <assert.h>  #include <hiredis/hiredis.h>#define REDIS_HOST        "127.0.0.1"#define REDIS_PORT        6379void redis_cli(){    redisContext *c = NULL;    redisReply      *r = NULL;    c = redisConnect(REDIS_HOST, REDIS_PORT);    if(NULL == c) {        printf("connect redis server failure\n");        return;    }    printf("redis connect sucess ip: %s  port: %d\n", REDIS_HOST, REDIS_PORT);    char *cmd1 = "set test hello";    r = (redisReply*)redisCommand(c, cmd1);    if (NULL == r) {        printf("Redis Command error [%s]\n", cmd1);        redisFree(c);          return;    }       if (r->type == REDIS_REPLY_ERROR ) {         printf("Redis Command[%s], error:%s\n", cmd1, r->str);        freeReplyObject(r);        redisFree(c);          return;    }      printf("redis command execute success[%s]\n", cmd1);    freeReplyObject(r);    char *cmd2 = "get test";    r = (redisReply*)redisCommand(c, cmd2);    if (NULL == r) {        printf("Redis Command error [%s]\n", cmd2);        redisFree(c);          return;    }       if (r->type == REDIS_REPLY_ERROR ) {         printf("Redis Command[%s], error:%s\n", cmd2, r->str);        freeReplyObject(r);        redisFree(c);          return;    }      printf("get test value is: %s\n", r->str);    freeReplyObject(r);    const char* cmd3 = "strlen test";      r = (redisReply*)redisCommand(c, cmd3);      if ( r->type != REDIS_REPLY_INTEGER)      {          printf("Failed to execute command[%s]\n", cmd3);          freeReplyObject(r);          redisFree(c);          return;      }    printf("The length of ‘test‘ is %d.\n", r->integer);           freeReplyObject(r);      redisFree(c);      return;}int main(int argc, char **argv){    redis_cli();        return 0;}


運行結果:

[[email protected] 3rd]# ./test redis connect sucess ip: 127.0.0.1  port: 6379redis command execute success[set test hello]get test value is: helloThe length of ‘test‘ is 5.[[email protected] 3rd]# 

 

linux下redis資料庫的簡單使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.