【Redis基础】Redis集群版在Java中的应用
2016-06-28 19:48
651 查看
前两天刚刚搭建完了redis集群,今天正好测试一下在Java中如何使用redis缓存一些东西。与spring是如何结合在一起的。封装一个操作redis的工具类,供项目中使用。
第一篇redis博客讲解过单机版在Java中的应用,应该了解到了。
首先要把jedis依赖的jar包加上。
在spring配置文件中添加redis配置。(三主三从,9001-9003是主,9004-9006是从)
<!-- 配置redis客户端集群版 -->
<!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg>
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.XX.XX"/>
<constructor-arg name="port" value="9001"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9002"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9003"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9004"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9005"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9006"/>
</bean>
</set>
</constructor-arg>
</bean>
<bean id="jedisClientCluster" class="com.dianshang.rest.component.impl.JedisClientCluster"/>封装redis的一些常用操作(存储String
类型,获取String类型,设置过期时间,删除hash数据等等)
/**
* redis操作工具类
* @author xiao
*
*/
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);
}
}
注:接口就不写出来了。
编写测试类进行测试
测试结果:
![](https://img-blog.csdn.net/20160628194648004?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
上一篇博客中我只讲解了一下我在搭建redis集群的时候遇到的问题,不知道大家有没有疑问,就是我往客户端配置了这么多节点,往redis中缓存数据的时候,它怎么知道该缓存到哪个服务器上呢??在这里我简单的说一下,
Redis
集群中内置了16384
个哈希槽,搭建集群时,每台服务器上已经分配了固定的哈希槽编号。当需要在 Redis
集群中放置一个key-value(数据)
时,redis
先对 key
使用 crc16
算法算出一个结果,然后把结果对 16384
求余数,这样每个 key
都会对应一个编号在 0-16383
之间的哈希槽,redis
会根据求余的结果,把数据映射到不同的redis服务器上。
第一篇redis博客讲解过单机版在Java中的应用,应该了解到了。
首先要把jedis依赖的jar包加上。
在spring配置文件中添加redis配置。(三主三从,9001-9003是主,9004-9006是从)
<!-- 配置redis客户端集群版 -->
<!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg>
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.XX.XX"/>
<constructor-arg name="port" value="9001"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9002"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9003"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9004"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9005"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="XXXXXXX"/>
<constructor-arg name="port" value="9006"/>
</bean>
</set>
</constructor-arg>
</bean>
<bean id="jedisClientCluster" class="com.dianshang.rest.component.impl.JedisClientCluster"/>封装redis的一些常用操作(存储String
类型,获取String类型,设置过期时间,删除hash数据等等)
/**
* redis操作工具类
* @author xiao
*
*/
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:spring/applicationContext-*.xml"); //从容器中获得JedisClient对象 JedisClient jedisClient = applicationContext.getBean(JedisClient.class); //jedisClient操作redis jedisClient.set("cliet1", "1000"); String string = jedisClient.get("cliet1"); System.out.println(string); }
测试结果:
上一篇博客中我只讲解了一下我在搭建redis集群的时候遇到的问题,不知道大家有没有疑问,就是我往客户端配置了这么多节点,往redis中缓存数据的时候,它怎么知道该缓存到哪个服务器上呢??在这里我简单的说一下,
Redis
集群中内置了16384
个哈希槽,搭建集群时,每台服务器上已经分配了固定的哈希槽编号。当需要在 Redis
集群中放置一个key-value(数据)
时,redis
先对 key
使用 crc16
算法算出一个结果,然后把结果对 16384
求余数,这样每个 key
都会对应一个编号在 0-16383
之间的哈希槽,redis
会根据求余的结果,把数据映射到不同的redis服务器上。
相关文章推荐
- redis之ziplist
- tomcat7 redis session 共享
- -一个简单的数据缓存解决方案
- redis.conf详解
- redis几种启动方式
- The Little Redis Book
- Redis作者谈Redis应用场景
- Redis Tools
- Redis介绍及常用命令
- Can’t save in background: fork: Cannot allocate memory
- (java)使用redis的第一个简单实例
- Redis监控技巧(转)
- Redis on Windows
- redis基本教程
- redis数据类型和应用场景
- redis’五种格式的存储与展示
- Redis的正确安装方式
- Spring Data Redis 让 NoSQL 快如闪电(2)
- Spring Data Redis 让 NoSQL 快如闪电(2)
- l来自wentao:项目加入缓存(redis),实时调试时用 -----可视化缓存,flushdb