java整合redis集群_spring redis整合教程(redis集群)

spring redis整合非常简单简单,本教程案例采用了redis集群的方式整合spring框架,项目采用maven加入redis jar包,是ssm框架的项目,ssm框架整合这里就不说了,废话不多说,开始吧!

1:在项目的pom.xml文件中加入redis客户端jar包,代码如下。

redis.clients

jedis

2.6.0

2:在src/main/resources下创建redis.properties的配置文件,例如使用两个redis集群,代码如下。redis.maxTotal = 50

redis.node1.ip1 = 192.168.0.1

redis.node1.port1 = 6379

redis.node2.ip2 = 192.168.0.2

redis.node2.port2 = 6379

3:在applicationContext.xml中加载redis.properties的配置,跟加载mysql.properties配置文件是一样的,在以下这个位置中添加。这个不用我说吧。

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

classpath:mysql.properties

classpath:redis.properties

4:在src/main/resources下创建applicationContext-redis.xml文件,用于配置redis连接池,redis集群配置等,便于以后@Autowired注入,代码如下。

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">

destroy-method="close">

注意:下面代码不在项目中,只是为了让你知道,如果你不理解上面的redis配置代码,可以对照下面redis集群的java类看看,以便你对上面的redis spring配置的由来有所了解。import java.util.ArrayList;

import java.util.List;

import redis.clients.jedis.JedisPoolConfig;

import redis.clients.jedis.JedisShardInfo;

import redis.clients.jedis.ShardedJedis;

import redis.clients.jedis.ShardedJedisPool;

/**

* 集群式的连接池

*

*/

public class ShardedJedisPoolDemo {

public static void main(String[] args) {

// 构建连接池配置信息

JedisPoolConfig poolConfig = new JedisPoolConfig();

// 设置最大连接数

poolConfig.setMaxTotal(50);

// 定义集群信息

List shards = new ArrayList();

shards.add(new JedisShardInfo("192.168.0.1", 6379));

shards.add(new JedisShardInfo("192.168.0.2", 6379));

// 定义集群连接池

ShardedJedisPool shardedJedisPool = new ShardedJedisPool(poolConfig, shards);

ShardedJedis shardedJedis = null;

try {

// 从连接池中获取到jedis分片对象

shardedJedis = shardedJedisPool.getResource();

// 从redis中获取数据

String value = shardedJedis.get("mytest");

System.out.println(value);

} catch (Exception e) {

e.printStackTrace();

} finally {

if (null != shardedJedis) {

// 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态

shardedJedis.close();

}

}

// 关闭连接池

shardedJedisPool.close();

}

}

5:在service层中准备一个redis往redis写入数据和删除数据的方法,以便在用到的地方@Autowired注入进去使用,由于重复代码太多,这里自定义了一个Function.java接口类用于封装重复的数据。//E传入的对象,T代表返回的对象类型

public interface Function {

public T callback(E e);

}

然后在RedisService.java封装我们的service增删redis数据的方法。import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import redis.clients.jedis.JedisPoolConfig;

import redis.clients.jedis.ShardedJedis;

import redis.clients.jedis.ShardedJedisPool;

@Service

public class RedisService {

//required=false当要用到时,才注入

@Autowired(required=false)

private ShardedJedisPool shardedJedisPool;

//required=false当要用到时,才注入

@Autowired(required=false)

private JedisPoolConfig jedisPoolConfig;

public  T execute(Function fun){

ShardedJedis shardedJedis = null;

try {

// 从连接池中获取到jedis分片对象

shardedJedis = shardedJedisPool.getResource();

// 从redis中获取数据

return  fun.callback(shardedJedis);

} catch (Exception e) {

e.printStackTrace();

} finally {

if (null != shardedJedis) {

// 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态

shardedJedis.close();

}

}

return null;

}

/**

* set操作

* @param key

* @param value

* @return

*/

public String set(final String key,final String value){

return this.execute(new Function() {

@Override

public String callback(ShardedJedis e) {

return e.set(key, value);

}

});

}

/**

* get操作

* @param key

* @return

*/

public String get(final String key){

return  this.execute(new Function() {

@Override

public String callback(ShardedJedis e) {

return e.get(key);

}

});

}

/**

* 设置某个key的生存时间

* @param key

* @param seconds 生存时间

* @return

*/

public Long expire(final String key,final Integer seconds){

return this.execute(new Function() {

@Override

public Long callback(ShardedJedis e) {

return e.expire(key, seconds);

}

});

}

/**

* 执行del,删除一个键

*/

public Long del(final String key){

return this.execute(new Function() {

@Override

public Long callback(ShardedJedis e) {

// TODO Auto-generated method stub

return e.del(key);

}

});

}

/**

* 执行set key和value值,并设置保存时间

*/

public String set(final String key,final String value,final Integer seconds){

return this.execute(new Function() {

@Override

public String callback(ShardedJedis e) {

String str = e.set(key, value);

expire(key, seconds);

return str;

}

});

}

}

6:在需要使用redis缓存的地方注入我们定义好的RedisService类,代码如下。@Autowired

private RedisService redisService

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/226.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值