您的位置:首页 > 数据库 > Redis

Redis集群版在Java中的应用以及和spring结合

2017-06-08 14:25 393 查看
转自  http://blog.csdn.net/u010539352/article/details/51778242

前两天刚刚搭建完了Redis集群,今天正好测试一下在Java中如何使用redis缓存一些东西。与spring是如何结合在一起的。封装一个操作redis的工具类,供项目中使用。

 

第一篇redis博客讲解过单机版在Java中的应用,应该了解到了。

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

 

spring配置文件中添加redis配置。(三主三从,9001-9003是主,9004-9006是从)

[html] view
plain copy

<!-- 配置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>  

  

lt;bean id="jedisClientCluster" class="com.dianshang.rest.component.impl.JedisClientCluster"/>  

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

[html] view
plain copy

/**  

 * 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);  

    }  

  

}  

注:接口就不写出来了。

 

编写测试类进行测试

[html] view
plain copy

@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服务器上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: