Redis集群(八):Redis Sharding集群
一、Redis目前的集群方案主要有两种:Redis Sharding和Redis Cluster
- 客户端实现
- 各个Redis节点独立,之间无关系
- 某个Redis节点挂了,整个集群不可用,所以需要对每个节点做主从备份
- 主从备份方案一般通过读写分离设置,每个master至少两个slaver,只有这样master挂掉后,才能选举其中一个Slaver成为新的master,原来master节点加入集群后成为新master的slaver节点
- redis主从切换对客户端jedis使用时透明的,即redis发生了主从切换并不影响jedis的使用
- 节点扩展和收缩不友好
- Redis集群的搭建可参考文章:搭建3个master-slaver的主从配置
http://www.cnblogs.com/gossip/p/5992716.html
http://www.cnblogs.com/gossip/p/5992821.html - 注意:一般会搭建3个master节点,每个master挂2个slaver,各个master之间并无联系。Redis Cluster的方案是所有master有联系并进行心跳通信,和Redis Sharding不一样
- 版本:2.9.0
- 实现代码
|
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集群的更多相关文章
- Redis学习总结(八)--Redis云平台
在实际生产环境中通过命令行的形式去进行集群的管理是一件很繁琐并且容易出现错误的事情,所以就引入了云平台的概念. 什么是云平台 Redis 云平台是指通过 BS 等架构实现对 Redis 的管理和监控. ...
- Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动重新连接
上文介绍了Redis Sharding集群的使用,点击阅读 本文介绍当某个Redis节点的Master节点发生问题,发生主从切换时,Jedis怎样自动重连新的Master节点 一.步骤如下: 1.配 ...
- Redis搭建(四):Sharding集群模式
一. 方案 1. 介绍redis集群分为服务端集群(Cluster)和客户端分片(Sharding)服务端集群:redis3.0以上版本实现,使用哈希槽,计算key的CRC16结果再模16834.此处 ...
- Redis学习笔记八:集群模式
作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...
- Redis总结(八)如何搭建高可用的Redis集群
以前总结Redis 的一些基本的安装和使用,大家可以这这里查看Redis 系列文章:https://www.cnblogs.com/zhangweizhong/category/771056.html ...
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 170103、Redis官方集群方案 Redis Cluster
前面我们谈了Redis Sharding多服务器集群技术,Redis Sharding是客户端Sharding技术,对于服务端来说,各个Redis服务器彼此是相互独立的,这对于服务端根据需要灵活部署R ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- Redis集群教程(Redis cluster tutorial)
本博文翻译自Redis官网:http://redis.io/topics/cluster-tutorial 本文档以温和的方式介绍Redis集群,不使用复杂的方式来理解分布式系统的概念. ...
随机推荐
- C#开发微信门户及应用(15)-微信菜单增加扫一扫、发图片、发地理位置功能
前面介绍了很多篇关于使用C#开发微信门户及应用的文章,基本上把当时微信能做的接口都封装差不多了,微信框架也积累了不少模块和用户,最近发现微信公众平台增加了不少内容,特别是在自定义菜单里面增加了扫一扫. ...
- 随机记录工作中常见的sql用法错误(一)
没事开始写博客,留下以前工作中常用的笔记,内容不全或者需要补充的可以留言,我只写我常用的. 网上很多类似动软生成器的小工具,这类工具虽然在表关系复杂的时候没什么软用,但是在一些简单的表结构关系还是很方 ...
- python学习笔记(基础一:'hello world'、变量、字符编码)
第一个python程序: Hello World程序 windows命令行中输入:python,进入python交互器,也可以称为解释器. print("Hello World!" ...
- tomcat 504 gateway time-out
今天有个环境ajax调用一个请求的时候,出现一个504 gateway time-out响应,原以为是nginx找不到资源的问题,恰当我们的服务器上又配置了nginx,看了配置文件,没有指向tomca ...
- JDBC关于时间的存取
Oracle数据库默认时间存储是java.sql.date,而java程序中的时间默认是java.util.date,所以通过JDBC存取的 时候会涉及到时间的转换问题. 1.日期存取 存入数据库的时 ...
- Hibernate4.2.4入门(二)——一对多的映射关系
一.前言 前面我们已经学过hibernate的基础,学会增删改查简单的操作,然而我们数据库中存在着1对多,多对1,多对多的关系,hibernate又是基于ORM基础上的开源框架,可以让我们不用去编写S ...
- Tomcat 配置详解/优化方案
转自:http://blog.csdn.net/cicada688/article/details/14451541 Service.xml Server.xml配置文件用于对整个容器进行相关的配置 ...
- Android中使用ExpandableListView实现好友分组
一个视图显示垂直滚动两级列表中的条目.这不同于列表视图,允许两个层次,类似于QQ的好友分组.要实现这个效果的整体思路为: 1.要给ExpandableListView 设置适配器,那么必须先设置数据源 ...
- iOS - NSMutableAttributedString富文本的实现
NSMutableAttributedString继承于NSAttributedString(带属性的字符串)能够简单快速实现富文本的效果;不多说直接上效果图和代码,通俗易懂: (一)效果图: (二) ...
- 【容器云】十分钟快速构建 Influxdb+cadvisor+grafana 监控
本文作者:七牛云布道师@陈爱珍,DBAPlus社群联合发起人.前新炬技术专家.多年企业级系统的应用运维及分布式系统实战经验.现专注于容器.微服务及DevOps落地的研究与实践. 安装过程 三个都直接下 ...