Redis c/c++, java 客户端连接
来源:互联网 发布:老男孩 python 12期 编辑:程序博客网 时间:2024/06/15 00:50
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
- Redis c/c++, java 客户端连接
- Redis C客户端API
- Redis C客户端API
- Redis C客户端API
- Redis C客户端API
- Redis C客户端API介绍
- Redis-C客户端-HiRedis-(一)
- Redis-C客户端-HiRedis-(二)
- redis集群客户端-c语言
- Redis-C客户端-HiRedis-(二)
- redis Java客户端jredis连接池
- redis java客户端Jedis 连接池实现
- redis在java中的客户端连接
- Redis C语言客户端库hiredis
- Redis C客户端Hiredis的安装
- Redis C语言客户端库hiredis使用方法
- Redis C语言客户端库hiredis
- Redis C语言客户端库hiredis使用方法
- 每日算法之九:Regular Expression Matching
- 九度题目1008:最短路径问题
- Android NFC 開發教程
- Thinking in Java 笔记(一)
- NGUI中的HUD Text插件使用教程
- Redis c/c++, java 客户端连接
- matlab的find函数效率还是很高的
- Ubuntu 基本命令
- 位运算与组合搜索(一)
- 泛型与RTTI的关系小议
- 简单的自动测试系统
- [2012.7.20]易语言post教程 - 飞龙
- 各种字符串函数(strcpy,strcmp,strlen)之深度剖析
- C++对象模型