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,能够到这里下载 http://download.csdn.net/detail/gfsfg8545/7357837

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);
}
// hset key field value
redis.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());
}
// 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 c/c++, java client连接的更多相关文章

  1. Redis02 Redis客户端之Java、连接远程Redis服务器失败

    1 查看支持Java的redis客户端 本博文采用 Jedis 作为redis客户端,采用 commons-pool2 作为连接redis服务器的连接池 2 下载相关依赖与实战 2.1 到 Repos ...

  2. Elasticsearch Java Client连接池

    按照Elasticsearch API,在Java端使用是ES服务需要创建Java Client,但是每一次连接都实例化一个client,对系统的消耗很大,即使在使用完毕之后将client close ...

  3. 047 大数据下的java client连接JDBC

    1.前提 启动hiveserver2服务 url,username,password. 2.官网 3.程序 4.结果 emp的第一列与第二列 5.源程序 package com.cj.it.hiveU ...

  4. 大数据下的java client连接JDBC

    1.前提 启动hiveserver2服务 url,username,password 2.程序 3.结果 emp的第一列与第二列

  5. JAVA HDFS API Client 连接HA

    如果Hadoop开启HA,那么用Java Client连接Hive的时候,需要指定一些额外的参数 package cn.itacst.hadoop.hdfs; import java.io.FileI ...

  6. 3、redis之java client环境搭建

    JAVA Client环境搭建 POM: <dependency> <groupId>redis.clients</groupId> <artifactId& ...

  7. Redis java client ==> Jedis

    https://github.com/xetorthio/jedis Jedis is a blazingly small and sane Redis java client. Jedis was ...

  8. 虚拟机centos 安装 redis 环境 linux 使用 java 远程连接 redis

    redis官网地址:http://www.redis.io/ 最新版本:2.8.3 在Linux下安装Redis非常简单,具体步骤如下(官网有说明): 1.下载源码,解压缩后编译源码. $ wget ...

  9. Java链接Redis时出现 “ERR Client sent AUTH, but no password is set” 异常的原因及解决办法

    Java链接Redis时出现 "ERR Client sent AUTH, but no password is set" 异常的原因及解决办法 [错误提示] redis.clie ...

随机推荐

  1. 为什么 string.find()返回值是-1

    之前好像在哪里见到过这个问题,时间有点久,想不起来了,今天写字符串又碰到这个问题,书上给出的定义是当string.find()没有找到时返回的是一个非常大的值,网上有人说是-1,两种说法都对,由于整数 ...

  2. Extjs4 RowEditing 的使用和更新方法

    如何灵活快速的掌握RowEditing组件的应用,应大家的要求,今天给大家具体讲下该组件的使用. 1.创建 var rowEditing = Ext.create('Ext.grid.plugin.R ...

  3. Invalid embedded descriptor for ".proto".Dependencies passed (Protobufer)解决办法

    前言 之前开发的时候,发现居然出现了Dependencies passed to FileDescriptor.buildFrom() don't match those listed in the ...

  4. hdu1428之spfa+dfs

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  5. Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/27250059 普通情况下,我们使用Runnable作为主要的任务表示形式,可是R ...

  6. 浅谈SQL之主键、外键约束

    约束:顾名思义就是一种限制,在表或列的层次设置约束,确保数据的有效性和完整性. SQL server中约束的主要分类: UNIQUE约束(唯一性约束) 防止一个特定的列中两个记录具有相同的值.可设置多 ...

  7. ubuntu12 下怎样上网

    1,host 就是WIN7 使用WIFI上网 2.打开设置你的VM 8 edit--Virutal network editor--VMnet0--Bridged (connect VMs to di ...

  8. 什么是gulp?

    gulp初涉 1.什么是gulp? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器:它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用 ...

  9. C#基础总结之Attribute

    Attribute是什么 Attribute的中文姓名 为什么我要拿一段文字来说Attribute的中文姓名呢?答案是:因为这很重要.正所谓“名”不正,则言不顺:另外重构手法中有一种很重要的方法叫重命 ...

  10. ajax基本概念,方法

    ajax    Asynchronous javascript and xml异步的 javascript and XMLajax 是一门在不刷新网页的情况下,与服务器进行交互更新部分网页的技术: 传 ...