设为首页 收藏本站
查看: 2213|回复: 0

[经验分享] Redis c/c++, java 客户端连接

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-5-23 10:14:43 | 显示全部楼层 |阅读模式
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.iyunv.com/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-value  
            redis.set("key1", "1");  
            redis.set("key2", "2");  
            // mset key-value  
            redis.mset("key3", "3", "key4", "4");  
            // get key-value  
            System.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 value  
            redis.hset("website", "CSDN", "http://iyunv.com/");  
            redis.hset("website", "Daniel", "http://blog.iyunv.com/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());  
            }  
            // quit  
            redis.quit();  
        }// redisTest  
         
        public 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);  
       }  
    }  


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-19563-1-1.html 上篇帖子: redis 源码分析(一) 内存管理 下篇帖子: redis安装及php扩展 客户端 java
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表