Redis 介绍
redis 这个想必大家都了解,关于redis的安装參考这里,redis使用文档參见这里,英文文档。
Redis Cclient的用法
Redis的cclient Hiredis使用比較广泛,以下主要介绍下它。
1,Hiredis的安装,配置
Hiredisclient 在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,Cclient訪问Redis
上面的工作完毕后,就能够进行连接hiredisserver。代码例如以下(编译环境为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 Javaclient的用法
1,Jedis下载
Jedis 是Redis 的Javaclient,Redis中Javaclient使用的相对照较广泛,以下就介绍Java怎么链接和实验Redis.
Jedis下载地址在 这里 通过网址 https://github.com/xetorthio/jedis 下载jedis源代码。
2,编译Jedis jar 包
通过步骤1 下载下来的源代码发现没有 jar包,对于编程直接使用源代码比較麻烦,如今把源代码打包为jar文件下次用的时候能够直接使用了。
用eclipse新建一个Jedisproject把 解压后的 redis文件放在新建project的src文件夹下,发现缺失对应的Commons Pool 2.2 包,须要到这里
下载可运行文件包commons-pool2-2.2-bin.zip,解压并把commons-pool2-2.2.jar等依赖包 通过 build path 中的Add External Jars 添�
到当前的project中,最后export jar包,命名为: jedis-2.4.2.jar,能够到这里下载 。
3,使用Jedis訪问 Redis
新建project, 在引入相关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);
}
redis.hset("website", "Daniel", "");
// 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 实现的,因此主要project中导入对应的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 介绍
redis 这个想必大家都了解,关于redis的安装參考这里,redis使用文档參见这里,英文文档。
Redis Cclient的用法
Redis的cclient Hiredis使用比較广泛,以下主要介绍下它。
1,Hiredis的安装,配置
Hiredisclient 在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,Cclient訪问Redis
上面的工作完毕后,就能够进行连接hiredisserver。代码例如以下(编译环境为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 Javaclient的用法
1,Jedis下载
Jedis 是Redis 的Javaclient,Redis中Javaclient使用的相对照较广泛,以下就介绍Java怎么链接和实验Redis.
Jedis下载地址在 这里 通过网址 https://github.com/xetorthio/jedis 下载jedis源代码。
2,编译Jedis jar 包
通过步骤1 下载下来的源代码发现没有 jar包,对于编程直接使用源代码比較麻烦,如今把源代码打包为jar文件下次用的时候能够直接使用了。
用eclipse新建一个Jedisproject把 解压后的 redis文件放在新建project的src文件夹下,发现缺失对应的Commons Pool 2.2 包,须要到这里
下载可运行文件包commons-pool2-2.2-bin.zip,解压并把commons-pool2-2.2.jar等依赖包 通过 build path 中的Add External Jars 添�
到当前的project中,最后export jar包,命名为: jedis-2.4.2.jar,能够到这里下载 。
3,使用Jedis訪问 Redis
新建project, 在引入相关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);
}
redis.hset("website", "Daniel", "");
// 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 实现的,因此主要project中导入对应的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);
}
}