java 连redis 集群_Redis集群集成Spring在Java中的使用详解

fff6c98081bf8904098fb5e1bd59ff4b.gif

今天测试一下在Java中如何使用redis缓存一些东西。与spring是如何结合在一起的。封装一个操作redis的工具类,供项目中使用。

一:首先要把jedis依赖的jar包加上。

二:和spring做集成。

在spring配置文件中添加redis配置。(三主三从,7001-7002是主,7003-7005是从)

三:接口和实现类

封装redis的一些常用操作(存储String 类型,获取String类型,设置过期时间,删除hash数据等等)

1.接口类如下:

/**

* redis操作接口

* @author itxm

*

*/

public interface JedisClient {

String set(String key, String value);

String get(String key);

Long hset(String key, String item, String value);

String hget(String key, String item);

Long incr(String key);

Long decr(String key);

Long expire(String key, int second);

Long ttl(String key);

Long hdel(String key, String item);

}

2.接口实现类如下:

/**

* redis操作工具接口实现类

* @author itxm

*

*/

public class JedisClientCluster implements JedisClient{

//注入jedisCluster

@Autowired

private JedisCluster jedisCluster;

/**

* 设置String数据类型

*

* @param key

* @param value

* @return

*/

@Override

public String set(String key, String value) {

return jedisCluster.set(key, value);

}

/**

* 获取String数据类型

*

* @param key

* @return

*/

@Override

public String get(String key) {

return jedisCluster.get(key);

}

/**

* 设置hash数据类型

*

* @param key

* @param item

* @param value

* @return

*/

@Override

public Long hset(String key, String item, String value) {

return jedisCluster.hset(key, item, value);

}

/**

* 获取hash数据类型

*

* @param key

* @param item

* @return

*/

@Override

public String hget(String key, String item) {

return jedisCluster.hget(key, item);

}

/**

* 删除hash数据

* @param key

* @param item

* @return

*/

@Override

public Long incr(String key) {

return jedisCluster.incr(key);

}

/**

* 加一操作

*

* @param key

* @return

*/

@Override

public Long decr(String key) {

return jedisCluster.decr(key);

}

/**

* 减一操作

*

* @param key

* @return

*/

@Override

public Long expire(String key, int second) {

return jedisCluster.expire(key, second);

}

/**

* 设置key的过期时间

*

* @param key

* @param second

* @return

*/

@Override

public Long ttl(String key) {

return jedisCluster.ttl(key);

}

/**

* 判断key是否过期

*

* @param key

* @return

*/

@Override

public Long hdel(String key, String item) {

return jedisCluster.hdel(key, item);

}

}

四:编写测试类进行测试

@Test

public void testJedisClientSpring() throws Exception {

//创建一个spring容器

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:config/spring/applicationContext*.xml");

//从容器中获得JedisClient对象

JedisClient jedisClient = applicationContext.getBean(JedisClient.class);

//jedisClient操作redis

jedisClient.set("cliet1", "500");

String string = jedisClient.get("cliet1");

System.out.println(string);

}

五:测试结果:

500

六:总结

不知道大家有没有疑问搭建redis集群的时候就是我往客户端配置了这么多节点,往redis中缓存数据的时候,它怎么知道该缓存到哪个服务器上呢?在这里我简单的说一下,Redis 集群中内置了16384 个哈希槽,搭建集群时,每台服务器上已经分配了固定的哈希槽编号。当需要在 Redis 集群中放置一个key-value(数据) 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据求余的结果,把数据映射到不同的redis服务器上。

fff6c98081bf8904098fb5e1bd59ff4b.gif

转载请注明来源网站:www.itxm.cn谢谢!

分享到:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值