Redis c/c++, java 用戶端串連

來源:互聯網
上載者:User

Redis 介紹

redis 這個想必大家都瞭解,關於redis的安裝參考這裡,redis使用文檔參見這裡,英文文檔。

Redis C用戶端的使用方法

 Redis的c用戶端 Hiredis使用比較廣泛,下面主要介紹下它。

1,Hiredis的安裝,配置

Hiredis用戶端 在redis解壓後的deps/hiredis下有相應的檔案。如果你的安裝包沒有相應的檔案可以到這裡下載。

cd deps/hiredis (下載hiredis的話 自行解壓進入 解壓後的目錄)。

make

最後 把相應的檔案加入到 系統目錄下,這樣系統能夠搜尋到。

mkdir /usr/lib/hiredis

cp libhiredis.so /usr/lib/hiredis #將動態串連庫libhiredis.so至/usr/lib/hiredis

mkdir /usr/include/hiredis

cp hiredis.h /usr/include/hiredis

最後注意:

需要更新一下庫的cache,執行命令:sudo ldconfig /usr/lib/

因為程式啟動時,會去/etc/ld.so.cache來尋找所要用的庫,不然會出現如下錯誤:error while loading shared libraries: libhiredis.so.0.10: cannot open shared object file: No such file or directory。 關於這些知識參考這裡。

2,C用戶端訪問Redis

上面的工作完成後,就可以進行串連hiredis伺服器。代碼如下(編譯環境為ubuntu系統上gcc)

// redis_test.c#include <stdio.h>#include <string.h>#include <hiredis.h>int main(){redisContext *c = redisConnect("127.0.0.1", 6379);// ip port   if(c->err)   {   printf("connect error.%s", c->errstr);   }   else   {   printf("connected\n");   }   char *value="It's a test";   redisReply *reply1 = redisCommand(c, "set key %s", value);   freeReplyObject(reply1);   redisReply *reply2 = redisCommand(c, "get key");   printf("key:1 value:%s\n", reply2->str);   freeReplyObject(reply2);   redisFree(c);   return 0;}

在linux系統下 .o 就相當於windows裡的obj檔案  .a 是好多個.o合在一起,用於靜態串連 .so 是shared object,用於動態串連的,和dll差不多 。
因此說明兩中編譯方法:

一,採用靜態連結方法

把 hiredis編譯後的 libredis.a 拷貝到當前程式 目錄下,執行如下命令:

gcc  -o test redis_test.c   libredis.a

運行程式: ./test , 可以看到成功了。

二,動態連結

執行如下命令:gcc  -o test redis_test.c   libredis.so (注意 使用共用庫前要sudo ldconfig /usr/lib/)

運行程式: ./test , 可以看到成功了。


Redis Java用戶端的使用方法

1,Jedis下載

Jedis 是Redis 的Java用戶端,Redis中Java用戶端使用的相對比較廣泛,下面就介紹Java怎麼連結和實驗Redis.

Jedis在  這裡  通過網址 https://github.com/xetorthio/jedis 下載jedis源碼。

2,編譯Jedis jar 包

通過步驟1 下載下來的源碼發現沒有 jar包,對於編程直接使用源碼比較麻煩,現在把源碼打包為jar檔案下次用的時候可以直接使用了。

用eclipse建立一個Jedis工程把 解壓後的 redis檔案放在建立工程的src目錄下,發現缺失相應的Commons Pool 2.2 包,需要到這裡

下載可執行檔包commons-pool2-2.2-bin.zip,解壓並把commons-pool2-2.2.jar等依賴包 通過 build path 中的Add External Jars 加入

到當前的工程中,最後export jar包,命名為: jedis-2.4.2.jar,可以到這裡下載  http://download.csdn.net/detail/gfsfg8545/7357837 。

3,使用Jedis訪問 Redis

建立工程, 在引入相關jar包後,只要new一個Jedis對象,就能做redis相關操作了。來個簡單的jedis執行個體:

package cn.daniel.test;/** *  * @author Daniel * redis java client test. * time 2014-05-16  */import java.util.List;import java.util.Map;import java.util.Map.Entry;import redis.clients.jedis.Jedis;public class JredisTest {public void redisTest() {Jedis redis = new Jedis("172.16.0.126", 6379);// connect server: ip port// redis.auth("user");// string operator// set key-valueredis.set("key1", "1");redis.set("key2", "2");// mset key-valueredis.mset("key3", "3", "key4", "4");// get key-valueSystem.out.println("key:key1 value:"+redis.get("key1"));// MGET key [key ...] List<String> list = redis.mget("key1", "key2", "key3", "key4");for(String s:list) {System.out.println(s);}// hset key field valueredis.hset("website", "CSDN", "http://csdn.net/");redis.hset("website", "Daniel", "http://blog.csdn.net/daniel_ustc");// hgetAll, Get all the fields and values in the hash Map<String, String> map = redis.hgetAll("website");for(Entry<String, String> entry:map.entrySet()) {System.out.println("key: " + entry.getKey()+ " value: " + entry.getValue());}// quitredis.quit();}// redisTestpublic static void main(String[] args) {JredisTest test = new JredisTest();test.redisTest();}}

運行上面的程式即可訪問Redis。也可以用maven管理jar包依賴,據說比較好用。

在實際使用中,一般會採用串連池的方式,不會整個項目都使用一個Connection。jedis pool 是基於apache common pool 實現的,因此主要工程中匯入相應的commons-pool2包,代碼如下:

package cn.ustc.daniel.test;/** * @author Daniel * redis java client test. * JredisPool * time 2014-05-18  */import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public class JedisPoolTest {private static JedisPool pool=null;/** * create pool */private static JedisPool createJedisPool() {if(pool == null) {// 建立串連池配置參數JedisPoolConfig config = new JedisPoolConfig();//設定jedis最多串連數 config.setMaxTotal(100);// 設定最大阻塞時間,毫秒數config.setMaxWaitMillis(1000);// 設定最多空閑串連個數config.setMaxIdle(10); // 建立串連池  ip port        pool = new JedisPool(config, "172.16.0.11", 6379);}return pool;} /**     * 在多線程環境同步初始化     */    private static synchronized void poolInit() {        if (pool == null)            pool=createJedisPool();    }    /**     * 擷取一個jedis 對象     *      * @return     */    public static Jedis getJedis() {        if (pool == null)            poolInit();        return pool.getResource();    }    /**     * 返還一個串連     */    public static void returnRes(Jedis jedis) {    pool.returnResource(jedis);    }        // main     public static void main(String[] args) {        Jedis jedis = JedisPoolTest.getJedis();        jedis.set("name","JedisPool");                String value = jedis.get("name");        JedisPoolTest.returnRes(jedis);        System.out.println(value);   }}



參考資料:

http://www.cnitblog.com/yunshichen/archive/2009/08/28/61065.html

http://flyingsnail.blog.51cto.com/5341669/1371650

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.