天天看点

淘淘商城20_redis的使用03_通过jedis连接redis一、通过jedis连接redis单机版二、jedis与spring整合三、通过jedis连接redis集群版

一、通过jedis连接redis单机版

1. 在taotao-content-service工程创建dao包,因为jedis是直接连接的数据库,所以是dao

淘淘商城20_redis的使用03_通过jedis连接redis一、通过jedis连接redis单机版二、jedis与spring整合三、通过jedis连接redis集群版

2. 创建接口JedisClient.java和实现类JedisClientSingle.java

JedisClient.java

package com.taotao.content.dao;

public interface JedisClient {
	//set方法
	public String set(String key, String value);
	//get方法
	public String get(String key);
	//删除key      del
	public long del(String key);
	//hset方法
	public long hset(String hkey, String key, String value);
	//hget方法
	public String hget(String hkey, String key);
	//删除Hashkey    hdel
	public long hdel(String hkey, String key);
	//生命周期
	public long expire(String key, int second);
	//查询剩余生命周期
	public long ttl(String key);
	//自增
	public long incr(String key);
    //判断key是否存在
	public boolean exists(String key);
}
           

JedisClientSingle.java 

package com.taotao.content.dao.impl;

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

import com.taotao.content.dao.JedisClient;

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

public class JedisClientSingle implements JedisClient {

	@Autowired
	private JedisPool jedisPool;
	
	/**
	 * set
	 */
	@Override
	public String set(String key, String value) {
		Jedis jedis = jedisPool.getResource();
		String str = jedis.set(key, value);
		jedis.close();
		return str;
	}

	/**
	 * get
	 */
	@Override
	public String get(String key) {
		Jedis jedis = jedisPool.getResource();
		String str = jedis.get(key);
		jedis.close();
		return str;
	}

	/**
	 * hash
	 * hset
	 */
	@Override
	public long hset(String hkey, String key, String value) {
		Jedis jedis = jedisPool.getResource();
		Long ss = jedis.hset(hkey, key, value);
		jedis.close();
		return ss;
	}

	/**
	 * hash  hget
	 */
	@Override
	public String hget(String hkey, String key) {
		Jedis jedis = jedisPool.getResource();
	   String str = jedis.hget(hkey, key);
	   jedis.close();
		return str;
	}

	/**
	 * expire
	 */
	@Override
	public long expire(String key, int second) {
		Jedis jedis = jedisPool.getResource();
		Long ss = jedis.expire(key, second);
		jedis.close();
		return ss;
	}

	/**
	 * ttl
	 */
	@Override
	public long ttl(String key) {
		Jedis jedis = jedisPool.getResource();
		Long ss = jedis.ttl(key);
		jedis.close();
		return ss;
	}

	/**
	 * incr
	 */
	@Override
	public long incr(String key) {
		Jedis jedis = jedisPool.getResource();
		Long ss = jedis.incr(key);
		jedis.close();
		return ss;
	}

	/**
	 * 删除key
	 */
	@Override
	public long del(String key) {
		Jedis jedis = jedisPool.getResource();
		Long ss = jedis.del(key);
		jedis.close();
		return ss;
	}

	/**
	 * 删除hashkey
	 */
	@Override
	public long hdel(String hkey, String key) {
		Jedis jedis = jedisPool.getResource();
		Long ss = jedis.hdel(hkey, key);
		jedis.close();
		return ss;
	}

    /**
	 * 判断key是否存在
	 */
	@Override
	public boolean exists(String key) {
		Jedis jedis = jedisPool.getResource();
		boolean boo = jedis.exists(key);
		jedis.close();
		return boo;
	}

}
           

3. 添加jedis的依赖

淘淘商城20_redis的使用03_通过jedis连接redis一、通过jedis连接redis单机版二、jedis与spring整合三、通过jedis连接redis集群版

4.测试(jedis没有与spring整合)

package com.taotao.test;

import org.junit.Test;

import redis.clients.jedis.Jedis;

public class JedisTest {
	// 测试单机版
	@Test
	public void testJedisSingle() {
		// 创建jedis的对象
		Jedis jedis = new Jedis("192.168.1.105", 6379);
		// 创建jedis对象的方法,方法名称和redis的命令一致
		jedis.set("key1", "jedis test");
		String js = jedis.get("key1");
		System.out.println(js);
		// 关闭jedis
		jedis.close();
	}
}
           

5.外部连接不上redis的解决方法

由于linux防火墙默认开启,redis的服务端口6379并不在开放规则之内,所有需要将此端口开放访问或者关闭防火墙。

关闭防火墙命令:sevice iptables stop

如果是修改防火墙规则,可以修改:vim /etc/sysconfig/iptables文件,添加redis的端口

6. 使用连接池连接

通过单实例连接redis不能对redis连接进行共享,可以使用连接池对redis连接进行共享,提高资源利用率,使用jedisPool连接redis服务,如下代码:

// 使用连接池连接redis
	@Test
	public void testJedisPool() {
		// 创建连接池
		JedisPool pool = new JedisPool("192.168.1.105", 6379);
		// 获取jedis对象
		Jedis jedis = pool.getResource();
		// 获取数据
		String string = jedis.get("key1");
		System.out.println(string);
		// 关闭jedis
		jedis.close();
		// 关闭连接池
		pool.close();
	}
           

7. 使用jedis连接redis集群

开启redis集群服务,关闭防火墙测试

/**
	 * 集群测试
	 * <p>
	 * Title: testJedisClster
	 * </p>
	 * <p>
	 * Description:
	 * </p>
	 */
	@Test
	public void testJedisCluster() {
		HashSet<HostAndPort> nodes = new HashSet<>();
		nodes.add(new HostAndPort("192.168.1.105", 7001));
		nodes.add(new HostAndPort("192.168.1.105", 7002));
		nodes.add(new HostAndPort("192.168.1.105", 7003));
		nodes.add(new HostAndPort("192.168.1.105", 7004));
		nodes.add(new HostAndPort("192.168.1.105", 7005));
		nodes.add(new HostAndPort("192.168.1.105", 7006));
		// 放入多个节点
		JedisCluster cluster = new JedisCluster(nodes);
		cluster.set("key2", "1000");
		String string = cluster.get("key2");
		System.out.println(string);
		cluster.close();// 关闭
	}
           

二、jedis与spring整合

1. 创建配置文件applicationContext-jedis.xml 

<?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"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
	
	     <!-- 连接池配置 可以不加-->
	    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
				<!-- 最大连接数 -->
				<property name="maxTotal" value="30" />
				<!-- 最大空闲连接数 -->
				<property name="maxIdle" value="10" />
				<!-- 每次释放连接的最大数目 -->
				<property name="numTestsPerEvictionRun" value="1024" />
				<!-- 释放连接的扫描间隔(毫秒) -->
				<property name="timeBetweenEvictionRunsMillis" value="30000" />
				<!-- 连接最小空闲时间 -->
				<property name="minEvictableIdleTimeMillis" value="1800000" />
				<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
				<property name="softMinEvictableIdleTimeMillis" value="10000" />
				<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
				<property name="maxWaitMillis" value="1500" />
				<!-- 在获取连接的时候检查有效性, 默认false -->
				<property name="testOnBorrow" value="true" />
				<!-- 在空闲时检查有效性, 默认false -->
				<property name="testWhileIdle" value="true" />
				<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
				<property name="blockWhenExhausted" value="false" />
		</bean>
		
		 <!-- 单机版jedis配置 -->
		<bean id="redisClient" class="redis.clients.jedis.JedisPool">
			<constructor-arg name="host" value="192.168.1.105"></constructor-arg>
			<constructor-arg name="port" value="6379"></constructor-arg>
	        <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
		</bean>
		
		<bean id="jedisClient" class="com.taotao.content.dao.impl.JedisClientSingle"/>
</beans>
           

2. 测试

淘淘商城20_redis的使用03_通过jedis连接redis一、通过jedis连接redis单机版二、jedis与spring整合三、通过jedis连接redis集群版

JedisClientSingleTest

package com.taotao.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.taotao.content.dao.impl.JedisClientSingle;

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

public class JedisClientSingleTest {

	@Test
	public void JedisClientSingleTest(){
		ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
		JedisPool pool =  (JedisPool) context.getBean("redisClient");
		Jedis jedis = pool.getResource();
		jedis.set("text", "10000");
		System.out.println(jedis.get("text"));
		jedis.close();
		pool.close();
	}
}
           

三、通过jedis连接redis集群版

1. applicationContext-jedis.xml (可以单机版放到一起)

<?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"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
	
	<!-- 连接池配置 -->
	    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
			<!-- 最大连接数 -->
			<property name="maxTotal" value="30" />
			<!-- 最大空闲连接数 -->
			<property name="maxIdle" value="10" />
			<!-- 每次释放连接的最大数目 -->
			<property name="numTestsPerEvictionRun" value="1024" />
			<!-- 释放连接的扫描间隔(毫秒) -->
			<property name="timeBetweenEvictionRunsMillis" value="30000" />
			<!-- 连接最小空闲时间 -->
			<property name="minEvictableIdleTimeMillis" value="1800000" />
			<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
			<property name="softMinEvictableIdleTimeMillis" value="10000" />
			<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
			<property name="maxWaitMillis" value="1500" />
			<!-- 在获取连接的时候检查有效性, 默认false -->
			<property name="testOnBorrow" value="true" />
			<!-- 在空闲时检查有效性, 默认false -->
			<property name="testWhileIdle" value="true" />
			<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
			<property name="blockWhenExhausted" value="false" />
		</bean>
		
	     	<!-- 集群版搭建 -->
 	<bean id="redisClient" class="redis.clients.jedis.JedisCluster">
		<constructor-arg name="nodes">
			<set>
				<bean  class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.1.105"></constructor-arg>
					<constructor-arg name="port" value="7001"></constructor-arg>
				</bean>
				<bean  class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.1.105"></constructor-arg>
					<constructor-arg name="port" value="7002"></constructor-arg>
				</bean>
				<bean  class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.1.105"></constructor-arg>
					<constructor-arg name="port" value="7003"></constructor-arg>
				</bean>
				<bean  class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.1.105"></constructor-arg>
					<constructor-arg name="port" value="7004"></constructor-arg>
				</bean>
				<bean  class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.1.105"></constructor-arg>
					<constructor-arg name="port" value="7005"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.1.105"></constructor-arg>
					<constructor-arg name="port" value="7006"></constructor-arg>
				</bean>
			</set>
		</constructor-arg>
		<constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
	</bean> 

	<bean id="jedisClientCluster" class="com.taotao.content.dao.impl.JedisClientCluster"></bean>
	     
</beans>
           

2. JedisClientCluster.java

淘淘商城20_redis的使用03_通过jedis连接redis一、通过jedis连接redis单机版二、jedis与spring整合三、通过jedis连接redis集群版
package com.taotao.content.dao.impl;

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

import com.taotao.content.dao.JedisClient;

import redis.clients.jedis.JedisCluster;

public class JedisClientCluster implements JedisClient {

	@Autowired
	private JedisCluster jedisCluster;
	
	// 集群版本不用关闭jedis
	@Override
	public String get(String key) {
		return jedisCluster.get(key);
	}
	
	@Override
	public String set(String key, String value) {
		return jedisCluster.set(key, value);
	}
	
	@Override
	public long hset(String hkey, String key, String value) {
		return jedisCluster.hset(hkey, key, value);
	}
	
	@Override
	public String hget(String hkey, String key) {
		return jedisCluster.hget(hkey, key);
	}
	
	@Override
	public long incr(String key) {
		return jedisCluster.incr(key);
	}
	
	@Override
	public long expire(String key, int second) {
		return jedisCluster.expire(key, second);
	}
	
	@Override
	public long ttl(String key) {
		return jedisCluster.ttl(key);
	}
	
	@Override
	public long del(String key) {
		return jedisCluster.del(key);
	}
	
	@Override
	public long hdel(String hkey, String key) {
		return jedisCluster.hdel(hkey, key);
	}

}
           

3. 测试

淘淘商城20_redis的使用03_通过jedis连接redis一、通过jedis连接redis单机版二、jedis与spring整合三、通过jedis连接redis集群版
package com.taotao.test;

import java.io.IOException;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.taotao.content.dao.impl.JedisClientSingle;

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

public class JedisClientClusterTest {

	@Test
	public void testSpringJedisCluster() throws IOException {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
				"classpath:spring/applicationContext-*.xml");
		JedisCluster cluster = (JedisCluster) applicationContext.getBean("redisClient");
		String string = cluster.get("key1");
		System.out.println(string);
		cluster.close();
	}
}
           

继续阅读