`
dwj147258
  • 浏览: 194081 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java通过Jedis使用Redis完整教程

阅读更多

使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip

如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip

 

一般的,使用Jedis都需要使用连接池来获取连接

一、连接池的配置和使用

首先在spring中配置jedis连接池的一些配置信息

  

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxTotal" value="${redis.maxTotal}"></property>
		<property name="maxIdle" value="${redis.maxIdle}"></property>
		<property name="minIdle" value="${redis.minIdle}"></property>
		<property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property>
		<property name="testOnBorrow" value="${redis.testOnBorrow}"></property>
		<property name="testOnReturn" value="${redis.testOnReturn}"></property>
		<property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}"></property>
		<property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}"></property>
		<property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}"></property>
	</bean>

 这些配置的具体描述信息可以简单的提一下:

 

 

maxTotal:最大连接数

maxIdle:最大空闲连接数

minIdle:最小空闲连接数

maxWaitMillis:获取连接时最大等待毫秒数,

testOnBorrow:获取连接时检查有效性

testOnRetrun:return给pool时,是否提前进行validate操作

minEvictableIdleTimeMillis:一个对象至少停留在idle状态的最短时间,才能被Idle, object evitor扫描并驱逐

numTestsPerEvictionRun:idle,object,evitor每次扫描对象的数

timeBetweenEvictionRunsMillis:释放连接的扫描间隔

配置完jedis连接池配置之后就可以配置连接池了

 

 

 

<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">
		<constructor-arg index="0" ref="jedisPoolConfig" />
		<constructor-arg index="1" value="${redis.hostName}" type="java.lang.String"/>
		<constructor-arg index="2" value="${redis.port}" type="int" />
		<constructor-arg index="3" value="${redis.timeout}"	type="int" />
		<constructor-arg index="4" value="${redis.auth}" type="java.lang.String"/>
	</bean>

 这里配置了jedis的连接池配置,名称地址以及端口密码等

 

 

。连接池就算是配好了,接下来我们就可以配置获取连接的类了:

 

import redis.clients.jedis.Jedis;
import redis.clients.util.Pool;


public class Test {

	private Pool<Jedis> redisPool;

	public Pool<Jedis>  getRedisPool() {
		return redisPool;
	}

	public void setRedisPool(Pool<Jedis>  redisPool) {
		this.redisPool = redisPool;
	}

	public Jedis getJedis() {
		try {
			Jedis jedis = redisPool.getResource();
			if (jedis == null) {
				return null;
			}
			return jedis;
		} catch (Exception e) {
		}
		return null;
	}

	public void release(Jedis jedis) {
		if (jedis != null) {
			jedis.close();
		}
	}
	public void init(){
		
	}

	public static void main(String[] args) {
	}
}

 这样我们可以写一个工具类来管理jedis的获取以及关闭等:

 

 public static Jedis getJedis(Integer index){

        Jedis jedis = null;

        JedisClient jedisClient = (JedisClient)ctx.getBean("jedisClient");

        if(null!=jedisClient){

            jedis = jedisClient.getJedis();

        }

        try{

            jedis.select(index);

        }catch(Exception e){

            jedis.select(JedisDBEnum.DEFAULT.getIndex().intValue());

            log.info("getJedis index:"+index+" and default select db 0",e);

        }

        return jedis;

 

    }

 

这一段很简单就是获取一个jedis连接,然后选择几号库,当然,用完jedis之后需要关闭连接

public static void closeJeids(Jedis jedis){

        try{

            if(null!=jedis){

                jedis.close();

            }

        }catch(Exception e){

                    

        }

 

    }

这就是通过jedis连接池获取jedis连接的全部流程了

 

 

 获取到jedis之后就可以往jedis里面放数据或取数据了,在redis中放对象可以将对象序列化或者是转换成map放入,下面先列出第二种方式的例子

public class SeriaUtil {
	
	/**
	 * 将对象转为map,Integer, BigDecimal Double ,Long默认值为空
	 * @param clazz
	 * @param obj
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static Map<String , String> getMapfromObject(Class<?> clazz , Object obj){
		Map<String , String > map = new HashMap<String , String>();
		JsonConfig jsonConfig = new JsonConfig();
		jsonConfig.registerDefaultValueProcessor(Integer.class, new DefaultValueProcessor() {
			@Override
			public Object getDefaultValue(Class arg0) {
				return null;
			}
		});
		jsonConfig.registerDefaultValueProcessor(BigDecimal.class, new DefaultValueProcessor() {
			@Override
			public Object getDefaultValue(Class arg0) {
				return null;
			}
		});
		jsonConfig.registerDefaultValueProcessor(Long.class, new DefaultValueProcessor() {
			@Override
			public Object getDefaultValue(Class arg0) {
				return null;
			}
		});
		jsonConfig.registerDefaultValueProcessor(Double.class, new DefaultValueProcessor() {
			@Override
			public Object getDefaultValue(Class arg0) {
				return null;
			}
		});
		JSONObject jsonObj = JSONObject.fromObject(obj , jsonConfig);
		Iterator it = jsonObj.keys();
		while(it.hasNext()){
			String key = String.valueOf(it.next()) ;
			Object data = jsonObj.get(key);
			if(null != data &&!(data instanceof JSONNull)){
				map.put(key, data.toString());
			}else{
				map.put(key, "");
			}
		}
		return map ;
	}
	
	@SuppressWarnings("unchecked")
	public static <T> T getObjet(Jedis jedis , String key , Class<T> clazz){
		Map<String , String> map =jedis.hgetAll(key);
		if(map == null || map.isEmpty() ){
			return null ;
		}
		Map<String , String > nMap = new HashMap<String , String>();
		for(String keys: map.keySet()){
			if(map.get(keys)!=null && !map.get(keys).equals("")){
				nMap.put(keys, map.get(keys));
			}
		}
		T t = null ;
		try {
			if(nMap == null || nMap.isEmpty()){
				return null ; 
			}
			Constructor<?> c = clazz.getConstructor(Map.class);
            t =  (T) c.newInstance(map);
			
		} catch (Exception e) {
			 JSONObject json = JSONObject.fromObject(map);
	         t =  (T) JSONObject.toBean(json,clazz);
		}
		return t ;
	}
}

 

 

public class JedisTest {
	public static void main(String[] args) {
		ApplicationContext ap = new ClassPathXmlApplicationContext("main/java/conf/applicationContext.xml");
		JedisClient jedisClient = (JedisClient)ap.getBean("jedisClient");
		Jedis jedis = jedisClient.getJedis();
		jedis.select(0);
		jedis.sadd("name:123", "dengwei");
		jedis.del("name:123");
		SeriaBean bean = new SeriaBean() ;
		bean.setAge(23);
		bean.setName("dengwe");
		jedis.hmset("bean", SeriaUtil.getMapfromObject(SeriaBean.class, bean));
		SeriaBean bb = SeriaUtil.getObjet(jedis, "bean", SeriaBean.class);
		System.out.println(bb);
		jedis.close();
	}
}

 

 

 

分享到:
评论

相关推荐

    Java通过Jedis操作Redis

    而Java作为广泛使用的编程语言,通过Jedis库与Redis进行交互,实现了对Redis丰富的操作功能。本文将深入探讨如何使用Java和Jedis来操作Redis,涉及Redis的基本数据类型、主从复制以及事务处理。 首先,让我们了解...

    redis实现分布式锁(java/jedis)

    redis实现分布式锁(java/jedis),其中包含工具方法以及使用demo 本资源是利用java的jedis实现 redis实现分布式锁(java/jedis),其中包含工具方法以及使用demo 本资源是利用java的jedis实现

    Jedis操作redis代码示例

    Jedis是Java社区广泛使用的Redis客户端库,提供了丰富的API来与Redis服务器进行交互。本文将深入探讨如何使用Jedis进行Redis操作,并通过具体的代码示例来详细解析其API的使用。 首先,我们需要了解如何添加Jedis...

    Jedis操作Redis的案例

    通过整合MyBatis、Jedis、Servlet和JSP,我们可以构建一个完整的Redis数据存取和展示的应用。在实际项目中,还需要考虑错误处理、资源关闭、连接池管理等问题,以确保系统的稳定性和性能。同时,Jedis的操作可以封装...

    Jedis操作redis服务实例

    **Jedis操作Redis服务实例详解** ...总之,Jedis是Java开发者操作Redis的重要工具,通过其提供的API,我们可以实现各种复杂的数据操作。理解并熟练掌握Jedis的使用,将有助于我们在开发中更好地利用Redis的高效特性。

    spring-data + jedis + redis代码

    Jedis是Java的一个开源客户端,专门用于连接和操作Redis服务器。 首先,让我们详细了解一下Spring Data。Spring Data是一个模块化的项目,它的主要目标是通过提供统一的API来减少数据访问层的开发工作。这个框架...

    Redis使用教程,详解

    Jedis 是 Redis 官网首选的 Java 客户端开发包,通过 Jedis,我们可以在 Java 中使用 Redis。Jedis 的使用非常简单,首先需要引入相关的 jar 包,然后创建连接实例,最后使用 Jedis 操作 Redis。 Redis 的特点 ...

    jedis通过JedisSentinelPool获取jedis操作redis

    jedis通过JedisSentinelPool获取jedis操作redis,通过配置sentienl,获取sentinel连接池,通过sentinel,获取jedis信息

    各种版本的redis+Jedis驱动包

    综上所述,这个压缩包提供了全面的Redis部署选项和Java开发工具,无论是在Windows还是Linux环境下,都可以快速搭建和管理Redis服务器,并使用Jedis进行高效的数据操作。对于初学者和开发者来说,这是一个非常实用的...

    Java中利用jedis操作redis示例.zip

    Jedis是Java社区广泛使用的Redis客户端,它提供了丰富的API来操作Redis服务器。下面我们将深入探讨如何使用Jedis进行Redis操作,并通过实际示例来加深理解。 1. **安装与依赖** 首先,要在Java项目中使用Jedis,...

    java redis使用之利用jedis实现redis消息队列.docx

    ### Java Redis 使用之利用 Jedis 实现 Redis 消息队列 #### 一、引言 随着互联网应用的发展,消息队列在系统架构中的地位愈发重要。它不仅可以提高系统的响应速度,还可以帮助开发者构建出更加健壮、可扩展的应用...

    jedisRedis的Java客户端

    - 连接Redis:Jedis实例化时需要指定Redis服务器的IP地址和端口号,可以通过`Jedis jedis = new Jedis("localhost", 6379);`建立连接。 - 基本操作:包括设置键值对(`set(key, value)`)、获取键值(`get(key)`)...

    jedis(java连接redis)

    Jedis是Java开发Redis应用的基础,通过它,开发者可以充分利用Redis的强大功能,提升应用程序的性能和可扩展性。无论是简单的键值存储,还是复杂的分布式数据结构操作,Jedis都能提供简洁而高效的解决方案。

    java redis依赖包

    jedis.jar redis.jar java缓存 jedis.jar redis.jar java缓存 jedis.jar redis.jar java缓存 jedis.jar redis.jar java缓存

    java jedis redis 接口工具类

    在Java开发中,Redis是一个广泛使用的高性能键值存储系统,而Jedis是Java语言与Redis进行交互的主要客户端库。本文将深入探讨如何在Java框架中使用Jedis来操作Redis,包括单机版和集群版的设置,以及如何设计一个...

    Java使用Jedis操作Redis服务器的实例代码

    Java使用Jedis操作Redis服务器的实例代码 title: Java使用Jedis操作Redis服务器的实例代码 本篇文章主要介绍了Java使用Jedis操作Redis服务器的实例代码,包括Maven配置、简单应用、JedisPool的实现和使用pipeline...

    jedis调用redis源码Demo

    jedis调用redis源码Demo,直接导入工程就可以运行。 redis目录下有redis安装文件和入门电子书 redis64-2.8.9.zip redisbin_x32.zip Redis入门指南(JB51.NET).pdf Redis设计与实现.pdf src: FirestJedisTest.java ...

    Jedis 操作Redis 集群demo

    而Jedis是Java语言与Redis交互的主要客户端库,提供了丰富的API供开发者进行操作。本示例主要讨论如何使用Jedis来操作Redis集群。 首先,要理解Redis集群的基本概念。Redis集群是通过将数据分散在多个节点上来实现...

    jedis-2.9.0.jar和commons-pool2-2.6.0.jar下载(jedis连接redis数据库)

    **标题与描述解析** 标题"jedis-2.9.0.jar和commons-pool2-2.6.0.jar下载...通过理解和正确使用Jedis及Apache Commons Pool,Java开发者可以高效地与Redis数据库进行交互,实现数据存储、检索和缓存等多种功能。

    redis相关jar包(redis2.1.5、jedis2.9.0)

    在Java开发中,我们通常使用Jedis作为客户端库来与Redis进行交互。本文将深入探讨Redis、Jedis以及Spring Data Redis这三个核心概念,并结合提供的jar包版本,解析它们在实际开发中的应用。 首先,Redis是一个开源...

Global site tag (gtag.js) - Google Analytics