【Redis基础】Redis集群版在Java中的应用

前两天刚刚搭建完了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);
	}

}

注:接口就不写出来了。

 

编写测试类进行测试

@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服务器上。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值