Redis3集群搭建

1、redis简介

redis是一个key-value存储系统。和memcache类似,它支持存储value类型相对更多,包括Stringlistsetsortset,这些数据类型都支持push/pop,add/remove及取交际并集差集等更丰富的操作,并且这些操作都是原子性的。与memcache一样,为了保证效率,数据都缓存在内存中。但redis为了进行数据持久化操作,会周期性的把数据写入磁盘(RDB)、或吧修改操作写入追加的记录文件(AOF)。
redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcache这类keyvalue存储的不足,在部分场合对关系库起到了很好的补充作用。

2、redis3的安装

redis-3.2.5.tar.gz

  1. 安装依赖gcc,ruby,rubygems
  2. 安装redisgems

    [root@CentOSA gem]gem install -l redis-3.2.1.gem

  3. 安装redis-3.0.5

    [root@CentOSA ~]# tar -zxf redis-3.0.5.tar.gz -C /usr/
    [root@CentOSA redis-3.2.5]# make

  4. 访问redis

    [root@CentOSA redis-3.2.5]# ./src/redis-cli -p 【6379】

3、redis3的集群搭建

  1. 开启AOF、Cluster

    appendonly yes
    cluster-enabled yes

  2. 搭建集群

    [root@CentOSA redis-3.2.5]# ./src/redis-trib.rb create –replicas 1 [ip(n):port(n)]

  3. 查看集群状况以及测试

    [root@CentOSA redis-3.2.5]# ./src/redis-trib.rb check [ip:port]
    [root@CentOSA redis-3.2.5]# ./src/redis-cli -p [port] -c -h [ip]

  4. 集群配置

    负载均衡
    [root@CentOSA redis-3.2.5]# ./src/redis-trib.rb reshard 192.168.111.129:6379
    扩展集群
    [root@CentOSA redis-3.2.5]# ./src/redis-trib.rb add-node [(new)ip:port] [(old)ip:port]
    附注:新机器将会被作为主机添加到集群。
    [root@CentOSA redis-3.2.5]# ./src/redis-trib.rb add-node –slave [(new)ip:port] [(old)ip:port]
    附注:随机给从机最少的主机添加从机
    [root@CentOSA redis-3.2.5]#./src/redis-trib.rb add-node –slave –master-id [nodeid] [(new)ip:port] [(old)ip:port]
    附注:给指定的主机添加从机
    删除节点
    [root@CentOSA redis-3.2.5]# ./src/redis-trib.rb del-node [(old)ip:port] [nodeid]
    附注:默认只能删除从机 ,如果没有hash slots主机也可以删除。
    将对应从机升级为主机
    [root@CentOSA redis-3.2.5]# ./src/redis-cli -p 6382 -c -h 192.168.111.129
    192.168.111.129:6382> CLUSTER FAILOVER
    更改从机的所属主机
    [root@CentOSA redis-3.2.5]# ./src/redis-cli -p 6379 -c -h 192.168.111.129
    192.168.111.129:6379> CLUSTER REPLICATE [nodeid]

4、 通过jedis操作redis3集群

代码如下

public class RedisAndJavaTest5 {
    public static void main(String[] args) {
        //添加节点
        Set<HostAndPort> nodes=new HashSet<HostAndPort>();
        nodes.add(new HostAndPort("192.168.0.185", 6379));
        nodes.add(new HostAndPort("192.168.0.185", 6380));
        nodes.add(new HostAndPort("192.168.0.185", 6381));
        nodes.add(new HostAndPort("192.168.0.185", 6382));
        nodes.add(new HostAndPort("192.168.0.185", 6383));
        nodes.add(new HostAndPort("192.168.0.185", 6384));
        nodes.add(new HostAndPort("192.168.0.185", 6385));
        //获得cluster
        JedisCluster cluster=new JedisCluster(nodes);
        //测试get方法
        String string = cluster.get("user:1");
        System.out.println(string);
        cluster.close();    
    }
}

5、通过SpringData操作redis3集群

spring工厂配置文件

<!-- cluster配置 -->
<bean id="redisClusterConfiguration"       class="org.springframework.data.redis.connection.RedisClusterConfiguration">
    <constructor-arg index="0">
        <list>
            <value>192.168.111.129:6379</value>
            .
            .
        </list>
    </constructor-arg>
</bean>
<!-- 创建jedis连接工厂 -->
<bean id="jedisConnectionFactory"  class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <constructor-arg index="0" ref="redisClusterConfiguration"></constructor-arg>
</bean>
<!-- 构造RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory"/>
</bean>

代码如下

public class StringData {   
    public static void main(String[] args) {

        //通过Spring获得redisTemplate对象
        @SuppressWarnings("resource")
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
        RedisTemplate redisTemplate = (RedisTemplate) ac.getBean("redisTemplate");

        //测试redisTemplate对象获得opsValue对redis进行简单操作
        ValueOperations opsForValue = redisTemplate.opsForValue();
        opsForValue.set("spring:2", "spring2");
        String name = (String) opsForValue.get("spring:1");
        System.out.println(name);

        //redisTemplate对象可以获得不同数据类型的操作对象
        ListOperations opsForList = redisTemplate.opsForList();
        SetOperations opsForSet = redisTemplate.opsForSet();
        HashOperations opsForHash = redisTemplate.opsForHash();
        ZSetOperations opsForZSet = redisTemplate.opsForZSet();
    }
}

注:对cluster集群的支持是spring4较新版本的特性,以前的版本还不支持上述操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值