jedis整合spring单机版和集群版

本文详细介绍了如何在业务逻辑中添加Redis缓存,包括使用Jedis客户端进行Spring的单机版和集群版整合。针对单机版,配置了Jedis连接池,并提供了测试;对于集群版,配置了JedisCluster节点,并同样进行了测试。

1.1.1  Redis-cli

自带客户端。使用最多的。


1.1.1  图形化界面客户端


只支持单机版,不支持集群。



1.1.1  Jedis客户端

1.1.1.1        单机版


public class JedisTest {

	@Test
	public void testJedisSingle() {
		//创建一个jedis的对象。
		Jedis jedis = new Jedis("192.168.25.153", 6379);
		//调用jedis对象的方法,方法名称和redis的命令一致。
		jedis.set("key1", "jedis test");
		String string = jedis.get("key1");
		System.out.println(string);
		//关闭jedis。
		jedis.close();
	}
	
	/**
	 * 使用连接池
	 */
	@Test
	public void testJedisPool() {
		//创建jedis连接池
		JedisPool pool = new JedisPool("192.168.25.153", 6379);
		//从连接池中获得Jedis对象
		Jedis jedis = pool.getResource();
		String string = jedis.get("key1");
		System.out.println(string);
		//关闭jedis对象
		jedis.close();
		pool.close();
	}
}


1.1.1.1        集群版
@Test
	public void testJedisCluster() {
		HashSet<HostAndPort> nodes = new HashSet<>();
		nodes.add(new HostAndPort("192.168.25.153", 7001));
		nodes.add(new HostAndPort("192.168.25.153", 7002));
		nodes.add(new HostAndPort("192.168.25.153", 7003));
		nodes.add(new HostAndPort("192.168.25.153", 7004));
		nodes.add(new HostAndPort("192.168.25.153", 7005));
		nodes.add(new HostAndPort("192.168.25.153", 7006));
		
		JedisCluster cluster = new JedisCluster(nodes);
		
		cluster.set("key1", "1000");
		String string = cluster.get("key1");
		System.out.println(string);
		
		cluster.close();
	}

1  业务逻辑中添加缓存

需要在taotao-rest工程中添加缓存。

1.1   jedis整合spring

1.1.1  单机版整合

1.1.1.1        配置

<!-- 连接池配置 -->

      <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.25.153"></constructor-arg>

           <constructor-arg name="port"value="6379"></constructor-arg>

           <constructor-arg name="poolConfig"ref="jedisPoolConfig"></constructor-arg>

      </bean>


1.1.1.1        测试
/**
	 * 单机版测试
	 * <p>Title: testSpringJedisSingle</p>
	 * <p>Description: </p>
	 */
	@Test
	public void testSpringJedisSingle() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
		JedisPool pool = (JedisPool) applicationContext.getBean("redisClient");
		Jedis jedis = pool.getResource();
		String string = jedis.get("key1");
		System.out.println(string);
		jedis.close();
		pool.close();
	}

1.1.1  集群版整合

1.1.1.1        配置

<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.25.153"></constructor-arg>

                            <constructor-arg name="port"value="7001"></constructor-arg>

                      </bean>

                      <bean class="redis.clients.jedis.HostAndPort">

                            <constructor-arg name="host"value="192.168.25.153"></constructor-arg>

                            <constructor-arg name="port"value="7002"></constructor-arg>

                      </bean>

                      <bean class="redis.clients.jedis.HostAndPort">

                            <constructor-arg name="host"value="192.168.25.153"></constructor-arg>

                            <constructor-arg name="port"value="7003"></constructor-arg>

                      </bean>

                      <bean class="redis.clients.jedis.HostAndPort">

                            <constructor-arg name="host"value="192.168.25.153"></constructor-arg>

                            <constructor-arg name="port"value="7004"></constructor-arg>

                      </bean>

                      <bean class="redis.clients.jedis.HostAndPort">

                            <constructor-arg name="host"value="192.168.25.153"></constructor-arg>

                            <constructor-arg name="port"value="7005"></constructor-arg>

                      </bean>

                      <bean class="redis.clients.jedis.HostAndPort">

                            <constructor-arg name="host"value="192.168.25.153"></constructor-arg>

                            <constructor-arg name="port"value="7006"></constructor-arg>

                      </bean>

                 </set>

           </constructor-arg>

           <constructor-arg name="poolConfig"ref="jedisPoolConfig"></constructor-arg>

      </bean>


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

1.1   添加jedis dao

1.1.1  单机版


public class JedisClientSingle implements JedisClient{
	
	@Autowired
	private JedisPool jedisPool; 
	
	@Override
	public String get(String key) {
		Jedis jedis = jedisPool.getResource();
		String string = jedis.get(key);
		jedis.close();
		return string;
	}

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

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

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

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

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

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

}

Spring配置文件



1.1.1  集群版

public class JedisClientCluster implements JedisClient {

	@Autowired
	private JedisCluster jedisCluster;
	
	@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 String hget(String hkey, String key) {
		return jedisCluster.hget(hkey, key);
	}

	@Override
	public long hset(String hkey, String key, String value) {
		return jedisCluster.hset(hkey, key, value);
	}

	@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);
	}

}

1.1   把缓存添加到业务逻辑

注意:缓存的添加不能影响正常的业务逻辑。


@Override
	public List<TbContent> getContentList(long contentCid) {
		//从缓存中取内容
		try {
			String result = jedisClient.hget(INDEX_CONTENT_REDIS_KEY, contentCid + "");
			if (!StringUtils.isBlank(result)) {
				//把字符串转换成list
				List<TbContent> resultList = JsonUtils.jsonToList(result, TbContent.class);
				return resultList;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//根据内容分类id查询内容列表
		TbContentExample example = new TbContentExample();
		Criteria criteria = example.createCriteria();
		criteria.andCategoryIdEqualTo(contentCid);
		//执行查询
		List<TbContent> list = contentMapper.selectByExample(example);
		
		//向缓存中添加内容
		try {
			//把list转换成字符串
			String cacheString = JsonUtils.objectToJson(list);
			jedisClient.hset(INDEX_CONTENT_REDIS_KEY, contentCid + "", cacheString);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return list;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值