Redis3集群搭建

来源:互联网 发布:古典气质知乎 编辑:程序博客网 时间:2024/05/17 03:25

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较新版本的特性,以前的版本还不支持上述操作

0 0
原创粉丝点击