【redis】Jedis连接reids上手小例子


  reids支持多种语言的客户端管理,Jedis 是 Redis 官方首选的 Java 客户端开发包,所以在Java开发中经常使用的是Jedis,接下来介绍如何使用Jedis操作redis。


一、安装Jedis  jar包。

jedis-2.7.2.jar


二、 测试单机版


首先通过ping命令,测试一些能否连接成功。(2)添加一个值,测试能够成功取出来。代码如下:

/**
 * (单机版)测试连接是否成功
 */
  @Test
  public  void testConnect(){
	   //链接redis服务
	  Jedis jedis=new Jedis("192.168.65.128",6379);
	  //测试链接是否成功
	  System.out.println(jedis);
	  System.out.println(jedis.ping());
	  //添加key
	  //System.out.println(jedis.set("beijing", "大米时代"));
	  //获得key
	   System.out.println(jedis.get("beijing"));
  }
二、测试连接池
  /**
   * (单机版)测试连接池
   * @throws Exception
   */
  @Test
  public void testJedisPool() throws Exception{
	  //new一个连接池
	  JedisPool pool= new JedisPool("192.168.65.128",6379);
	 //从连接池中获得一个连接
	  Jedis jedis= pool.getResource();
	  jedis.set("testpool", "testpool");
	  System.out.println(jedis.get("testpool"));
	  //jedis必须每次都关闭
	  jedis.close();
	  //系统关闭时,关闭连接池
	 pool.close();
  }
  


三、测试集群版


 /**
   * (集群版)添加数据测试
   */
@Test
  public void testCluster(){
	  //1.创建一个JedisCluster对象
	  Set<HostAndPort> nodes = new HashSet<HostAndPort>();	
	  //2.在Nodes中指定每个结点的地址
	    nodes.add(new HostAndPort("192.168.65.128", 6379));
     	nodes.add(new HostAndPort("192.168.65.128", 6380));
     	nodes.add(new HostAndPort("192.168.65.128", 6381));
       	nodes.add(new HostAndPort("192.168.65.128", 6382));
        nodes.add(new HostAndPort("192.168.65.128", 6383));
     	nodes.add(new HostAndPort("192.168.65.128", 6384));	
     	//3.在Jediscluster在系统之中是单例的
     	JedisCluster cluster=new JedisCluster(nodes,30,10);
     	//JedisCluster cluster=new JedisCluster(nodes);
     	cluster.set("key1", "testCluster");
     	System.out.println(cluster.get("key1"));
     	System.out.println("你好");
     	
     	//4.最后关闭
     	cluster.close();
  }


四、在spring 中添加redis 配置过程。

现在需要思路:创建一个redis操作的接口。分别创建两个实现类对应redis 的单机版和集群版。当使用单机版redis时,配置单机版的实现类,当使用集群版本的时候,配置集群版的实现类。

1.编写Jedis客户端接口

这些方法都是简单的增删该查方法。

package cn.itcast.oa.component;
public interface JedisClient {
		public String set(String key, String value);
		public String get(String key) ;
		public Long hset(String key, String item, String value) ;
		public String hget(String key, String item);
                public Long incr(String key) ;
		public Long decr(String key) ;
		public Long expire(String key, int second) ;
		public Long ttl(String key) ;
}
2.编写单机版实现类
package cn.itcast.oa.component;

import org.springframework.beans.factory.annotation.Autowired;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisClientSingle implements JedisClient{
		
		@Autowired
		private JedisPool jedisPool;

		public String set(String key, String value) {
			Jedis jedis = jedisPool.getResource();
			String result = jedis.set(key, value);
			jedis.close();
			return result;
		}

		public String get(String key) {
			Jedis jedis = jedisPool.getResource();
			String result = jedis.get(key);
			jedis.close();
			return result;
		}

		public Long hset(String key, String item, String value) {
			Jedis jedis = jedisPool.getResource();
			Long result = jedis.hset(key, item, value);
			jedis.close();
			return result;
		}

		public String hget(String key, String item) {
			Jedis jedis = jedisPool.getResource();
			String result = jedis.hget(key, item);
			jedis.close();
			return result;
		}

		public Long incr(String key) {
			Jedis jedis = jedisPool.getResource();
			Long result = jedis.incr(key);
			jedis.close();
			return result;
		}
		public Long decr(String key) {
			Jedis jedis = jedisPool.getResource();
			Long result = jedis.decr(key);
			jedis.close();
			return result;
		}

		public Long expire(String key, int second) {
			Jedis jedis = jedisPool.getResource();
			Long result = jedis.expire(key, second);
			jedis.close();
			return result;
		}

		public Long ttl(String key) {
			Jedis jedis = jedisPool.getResource();
			Long result = jedis.ttl(key);
			jedis.close();
			return result;
		}

	}


4.编写集群实现类


package cn.itcast.oa.component;

import org.springframework.beans.factory.annotation.Autowired;

import redis.clients.jedis.JedisCluster;

	public class JedisClientCluster implements JedisClient {
		
		@Autowired
		private JedisCluster jedisCluster;

		public String set(String key, String value) {
			return jedisCluster.set(key, value);
		}

		public String get(String key) {
			return jedisCluster.get(key);
		}

		public Long hset(String key, String item, String value) {
			return jedisCluster.hset(key, item, value);
		}

		public String hget(String key, String item) {
			return jedisCluster.hget(key, item);
		}

		public Long incr(String key) {
			return jedisCluster.incr(key);
		}

		public Long decr(String key) {
			return jedisCluster.decr(key);
		}

		public Long expire(String key, int second) {
			return jedisCluster.expire(key, second);
		}

		public Long ttl(String key) {
			return jedisCluster.ttl(key);
		}


}


5.编写applicationContext.xml文件


   applicationContext文件中配置了集群版和单机版的相关配置,如果需要调用单机版的,就把集群版的代码注释;如果调用集群版的,就需要把单机版的代码注释,这样在客户端调用的时候,不需要修改调用代码,只需要修改applicationContext中的配置文件即可,达到了代码的灵活可配。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 自动扫描和装配Bean ,扫描所有的cn.itcast.oa下面的所有包 -->
      <context:component-scan base-package="cn.itcast.oa"> <context:component-scan> 
<!-- ====================================Redis测试代码=================================== -->
    <!--   ******************************单机版Redis配置start***********************-->
      <!-- 配置连接池 -->
  <!--  <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
		<constructor-arg name="host" value="192.168.65.129"></constructor-arg>
		<constructor-arg name="port" value="6379"></constructor-arg>
	 </bean>
	   -->
       <!-- 配置客户端实现类 -->
       <!-- <bean id ="jedisClientSingle" class="cn.itcast.oa.component.JedisClientSingle"/> -->
      <!--  ****************************单机版Redis配置************************-->
        <!--***************************配置客户端集群版end*********************** -->
    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
		<constructor-arg>
			<set>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.65.129"/>
					<constructor-arg name="port" value="6379"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.65.129"/>
					<constructor-arg name="port" value="6380"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.65.129"/>
					<constructor-arg name="port" value="6381"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.65.129"/>
					<constructor-arg name="port" value="6382"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.65.129"/>
					<constructor-arg name="port" value="6383"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.65.129"/>
					<constructor-arg name="port" value="6384"/>
				</bean>
			</set>
		</constructor-arg>
	</bean> 
         <!-- 集群版实现类 -->
     <bean id="jedisClientCluster" class="cn.itcast.oa.component.JedisClientCluster"/>
      <!--***************************配置客户端集群版end*********************** -->
     <!-- =============================Redis测试代码=========================================== -->	
</beans>


出现问题:
    在applicationContent.xml配置过程中,如果spring 配置的版本太低,<constructor-arg>会报如下问题:
cvc-complex-type.3.2.2: Attribute 'name' is not allowed to appear in element 'constructor-arg'.
原因:springframework配置版本太低,这个版本中还没有这个元素。
解决方法:配置高版本的springframework,本博客中采用的是springframework中的spring 4.0版本。

6.编写测试客户端


package cn.itcast.oa.component;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class testJedisClient {
/**
	 * 测试集群版
	 * @throws Exception
	 */
	@Test
	public void testJedisClientSpring() throws Exception {
		//创建一个spring容器
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		//从容器中获得JedisClient对象
		JedisClient jedisClient = (JedisClient) applicationContext.getBean("jedisClientCluster");
		//jedisClient操作redis
		jedisClient.set("cliet1", "1000");
		String string = jedisClient.get("cliet1");
		System.out.println(string);
	}
}

7.测试结果显示




小结:


    首先编写接口,接口中包含了基本的redis增删该查的操作,其次编写单机版和集群版不同的实现类,再次通过spring的IOC容器,管理redis操作接口,然后编写客户端,客户端从spring容器中拿到相关Bean,执行增删该查操作。通过spirng 的IOC容器来统一管理,建立连接,达到了灵活可配。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值