zoukankan      html  css  js  c++  java
  • Redis客户端集群


        1、Redis集群一般分为两类,即3.0版本后的服务端集群实现,3.0版本前的客户端集群实现,服务端集群即Redis Cluster(官方实现),采用slot槽的概念(分片,所有服务端redis实现共享16384个slot,集群的搭建、新增、删除、路由都很方便。而本文主要介绍Redis的客户端集群实现,即Redis Sharding

        2、Redis Sharding采用客户端Sharding方式(一致性hash服务端Redis还是一个个相对独立的Redis实例节点,没有做任何变动。同时,我们也不需要增加额外的中间处理组件,这是一种非常轻量、灵活的Redis多实例集群方法。  

        3、Jedis客户端支持客户端集群

        4、客户端集群的问题:由于采用了一致性Hash,Redis Sharding的一大缺陷就是不好扩容,虽然一致性hash只影响到附近的节点,但是当扩容时还是会出现redis key的迁移,会导致内存穿透,无法命中的问题。

          Redis作者给出了一个比较讨巧的办法--presharding,即预先根据系统规模尽量部署好多个Redis实例,这些实例占用系统资源很小,一台物理机可部署多个,让他们都参与sharding,当需要扩容时,选中一个实例作为主节点,新加入的Redis节点作为从节点进行数据复制。数据同步后,修改sharding配置,让指向原实例的Shard指向新机器上扩容后的Redis节点,同时调整新Redis节点为主节点,原实例可不再使用。(相同的数据,使用性能更好的机器替换原机器)

    presharding是预先分配好足够的分片,扩容时只是将属于某一分片的原Redis实例替换成新的容量更大的Redis实例。参与sharding的分片没有改变,所以也就不存在key值从一个区转移到另一个分片区的现象,只是将属于同分片区的键值从原Redis实例同步到新Redis实例。

        

  • 相关阅读:
    UITableView 表视图编辑
    Swift(一)简单值
    【iOS系列】- iOS吸附效果的实现 之 UICollectionView的使用全解
    【iOS系列】-A server with the specified hostname could not be found.问题解决
    【iOS9系列】-3DTouch开发
    【iOS系列】-iOS查看沙盒文件图文教程(真机+模拟器)
    【iOS系列】-iOS开发常用库文件总结
    【iOS系列】-UITableViewCell的展开与收缩的实现思路
    02-Swift学习笔记-元组类型
    CocoaPoda在iOS开发中的使用
  • 原文地址:https://www.cnblogs.com/gossip/p/6387109.html
Copyright © 2011-2022 走看看