一、Redis目前的集群方案主要有两种:Redis Sharding和Redis Cluster

1、Redis Sharding:3.0以前基本上使用分片实现集群,目前主流方案,客户端实现
2、Redis Cluster:3.0后官方提供了集群方案,2015年4月发布,目前大型应用验证较少,服务端实现
上面两种方案的区别请见:

二、下面只说明使用Jedis实现Redis Sharding的方案
Redis Sharding特点:
  1. 客户端实现
  2. 各个Redis节点独立,之间无关系
  3. 某个Redis节点挂了,整个集群不可用,所以需要对每个节点做主从备份
  4. 主从备份方案一般通过读写分离设置,每个master至少两个slaver,只有这样master挂掉后,才能选举其中一个Slaver成为新的master,原来master节点加入集群后成为新master的slaver节点
  5. redis主从切换对客户端jedis使用时透明的,即redis发生了主从切换并不影响jedis的使用
缺点:
  1. 节点扩展和收缩不友好

三、Redis服务集群的搭建
  1. Redis集群的搭建可参考文章:搭建3个master-slaver的主从配置
    http://www.cnblogs.com/gossip/p/5992716.html
    http://www.cnblogs.com/gossip/p/5992821.html
  2. 注意:一般会搭建3个master节点,每个master挂2个slaver,各个master之间并无联系。Redis Cluster的方案是所有master有联系并进行心跳通信,和Redis Sharding不一样

四、Jedis客户端的使用
  1. 版本:2.9.0
  2. 实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import redis.clients.jedis.*;
import redis.clients.util.JedisClusterCRC16;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
public class ShardingTest {
 
    private static String ip = "127.0.0.1";
    private static int timeout = 10000;
 
    public static void main(String[] args) {
        JedisPoolConfig poolConfig = getPoolConfig();
 
        List<JedisShardInfo> listRedis = getListSherdInfo();
 
        ShardedJedisPool jedisPool = new ShardedJedisPool(poolConfig, listRedis);
 
        ShardedJedis jedis = jedisPool.getResource();
 
        testData(jedis);
        //initString(jedis);
        //initHash(jedis);                    //17秒
        //initHashPipeline(jedis);              //0秒(是的,0秒)
        System.out.println(jedis.get("k1"));
        System.out.println(jedis.hgetAll("product2"));
        //initHashPipeline100000(jedis);    //100000 总时间  63秒
 
        jedis.close();
        jedisPool.destroy();
 
    }
 
    private static JedisPoolConfig getPoolConfig() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(200);
        poolConfig.setMaxIdle(30);
 
        //就是在进行borrowObject进行处理时,对拿到的connection进行validateObject校验
        //poolConfig.setTestOnBorrow(true);
        //就是在进行returnObject对返回的connection进行validateObject校验,个人觉得对数据库连接池的管理意义不大
        //poolConfig.setTestOnReturn(true);
        //GenericObjectPool中针对pool管理,起了一个Evict的TimerTask定时线程进行控制(可通过设置参数
        //poolConfig.setTestWhileIdle(true);
        return poolConfig;
    }
 
    private static List<JedisShardInfo> getListSherdInfo() {
        JedisShardInfo redis1 = new JedisShardInfo(ip, 9111);
        redis1.setConnectionTimeout(timeout);
 
        JedisShardInfo redis2 = new JedisShardInfo(ip, 9112);
        redis2.setConnectionTimeout(timeout);
 
        JedisShardInfo redis3 = new JedisShardInfo(ip, 9113);
        redis3.setConnectionTimeout(timeout);
 
        List<JedisShardInfo> listRedis = new ArrayList<JedisShardInfo>();
        listRedis.add(redis1);
        listRedis.add(redis2);
        listRedis.add(redis3);
 
        return listRedis;
    }
 
    private static void testData(ShardedJedis jedis) {
        String key = "k5";
        String value = "v5";
        jedis.set(key, value);
 
        System.out.println("key:" + jedis.get(key));
        System.out.println("key:" + JedisClusterCRC16.getSlot(key));
        System.out.println(jedis.type(key));
    }
    }

Redis集群(八):Redis Sharding集群的更多相关文章

  1. Redis学习总结(八)--Redis云平台

    在实际生产环境中通过命令行的形式去进行集群的管理是一件很繁琐并且容易出现错误的事情,所以就引入了云平台的概念. 什么是云平台 Redis 云平台是指通过 BS 等架构实现对 Redis 的管理和监控. ...

  2. Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动重新连接

    上文介绍了Redis Sharding集群的使用,点击阅读 本文介绍当某个Redis节点的Master节点发生问题,发生主从切换时,Jedis怎样自动重连新的Master节点 ​一.步骤如下: 1.配 ...

  3. Redis搭建(四):Sharding集群模式

    一. 方案 1. 介绍redis集群分为服务端集群(Cluster)和客户端分片(Sharding)服务端集群:redis3.0以上版本实现,使用哈希槽,计算key的CRC16结果再模16834.此处 ...

  4. Redis学习笔记八:集群模式

    作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...

  5. Redis总结(八)如何搭建高可用的Redis集群

    以前总结Redis 的一些基本的安装和使用,大家可以这这里查看Redis 系列文章:https://www.cnblogs.com/zhangweizhong/category/771056.html ...

  6. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  7. 170103、Redis官方集群方案 Redis Cluster

    前面我们谈了Redis Sharding多服务器集群技术,Redis Sharding是客户端Sharding技术,对于服务端来说,各个Redis服务器彼此是相互独立的,这对于服务端根据需要灵活部署R ...

  8. 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  9. Redis集群教程(Redis cluster tutorial)

    本博文翻译自Redis官网:http://redis.io/topics/cluster-tutorial        本文档以温和的方式介绍Redis集群,不使用复杂的方式来理解分布式系统的概念. ...

随机推荐

  1. h1、h2、h3标签及strong标签对页面seo的影响

    今天和大家来聊下h1,h2,h3,strong几个标签,在网页中的使用对页面seo的影响,也阐述了个人的一些想法. 首先简要讲下H标签及strong标签的含义:<h1>.<h2> ...

  2. Error:Execution failed for task ':app:clean'.

    运行时出现 Error:Execution failed for task ':app:clean'. 错误,Builld->Clean Project即可.

  3. autofac 组件的实例范围

    实例范围决定如何在请求之间共享服务. 原文地址:http://docs.autofac.org/en/latest/lifetime/instance-scope.html 每个依赖一个实例 使用这个 ...

  4. 今天思考一个问题,PHP const和static的区别

    static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...

  5. 让IIS7.0.0.0支持 .iso .7z .torrent .apk等文件下载的设置方法

    IIS默认支持哪些MIME类型呢,我们可以这样查看:打开IIS管理器(计算机--管理--服务和应用程序--Internet信息服务(IIS)管理器:或者Win+R,输入inetmgr,Enter),在 ...

  6. nodejs微信公众号快速开发|自定义关键字回复

    一点说明: nodejs 微信api 扩展,集成大部分功能. 案例 https://github.com/leiroc/node-wxeasy-example 上传example中文件到服务器 ,然后 ...

  7. VisualStudio 调试Linux

    微软自从换了CEO之后,拥抱开源的步伐真实越来越快了,这部,现在VS可以跟踪Linux程序了 http://blogs.msdn.com/b/vcblog/archive/2015/11/18/ann ...

  8. 2016总结Android面试题

    1.简单的设计模式:单例模式:在系统中一个类只有一个实例. 分为懒汉模式和饿汉模式.饿汉模式的代码如下:public class Singleten{private static singleten ...

  9. xml文件解析(解析以后在RootTableViewController输出)

    这是从美团弄得xml文件,地区和经纬度. 你点了地区以后 ,  就可以查看经纬度 ,因为笔者懒, 有现成的文本框 , 所有偷懒了. 下面是一些枯燥的代码了 . #import <UIKit/UI ...

  10. 01背包问题python 2.7实现

    版权声明:本文为博主原创文章,转载请注明转自 http://www.cnblogs.com/kdxb/p/6140625.html #!/usr/bin/env python # -*- coding ...