iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Redis内存数据库分片的示例分析
  • 286
分享到

Redis内存数据库分片的示例分析

2024-04-02 19:04:59 286人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关Redis内存数据库分片的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 软件下载地址 ·  &

这篇文章将为大家详细讲解有关Redis内存数据库分片的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

软件下载地址

·       允许用多台机器的内存存放更大的数据集。如果没有分片,那么你只能存放单台机器内存的最大值的数据集。

·       允许用多核和多台机器提高计算能力和网络带宽。

常见的分片方式:

1、按照范围分片

2、哈希分片,例如一致性哈希

常见的分片的实现:

①客户端分片

②在代理中做分片,比如:twemproxy

③查询路由:就是发送查询到一个随机实例,这个实例会保证转发你的查询到正确的节点,redis集群在客户端的帮助下,实现了查询路由的一种混合形式,请求不是直接从redis实例转发到另一个实例,而是客户端收到重定向到正确的节点

④在服务端进行分片,Redis采用哈希槽(hash slot)的方式在服务器端进行分片:

Redis集群有16384个哈希槽,使用健CrC16对16384取模来计算一个键所属的哈希槽

分片的缺点

Redis 的一些特性与分片在一起时玩转的不是很好:

1、涉及多个键的操作通常不支持。例如,你不能对映射在两个不同 Redis 实例上的键执行交集(事实上有办法做到,但不是直接这么干)。

2、涉及多个键的事务不能使用。

3、分片的粒度(granularity)是键,所以不能使用一个很大的键来分片数据集,例如一个很大的有序集合

4、当使用了分片,数据处理变得更复杂,例如,你需要处理多个 RDB/AOF 文件,备份数据时你需要聚合多个实例和主机的持久化文件。

5、添加和删除容量也很复杂。例如,Redis 集群具有运行时动态添加和删除节点的能力来支持透明地再均衡数据,但是其他方式,像客户端分片和代理都不支持这个特性。但是,有一种称为预分片(Presharding)的技术在这一点上能帮上忙。

Redis分片的缺点

1、不支持涉及多建的操作,如mget,如果所操作的健都在同一个节点,就正常执行,否则会提示报错

2、分片的粒度是健,因此每个键对应的值不要太大

3、数据备份会比较麻烦,备份数据时你需要聚合多个实例和主机的持久化文件

4、扩容的处理比较麻烦

5、故障的恢复的处理会比较麻烦,可能需要重新梳理Master和Slave的关系,并调整每个复制集里面的数据

Redis的预分片技术

Redis的预分片技术可以按照以下步骤进行实例迁移操作:

 (1)在新机子上启动新的redis实例;

 (2)将新redis实例作为slave将原redis实例作为master,将数据从原redis实例迁移到新redis实例上;

 (3)停止客户端(分片操作在客户端上时)或代理服务器(分片操作在代理上)

(4)更新客户端或者代理服务器中的配置信息,去掉被迁移的原redis实例的ip和端口等信息,加上新启动redis实例的IP地址和端口;

(5)向新启动的redis发送SLAVEOF NOONE命令,终止新redis实例对原redis实例的从属关系;

(6)重启客户端程序或者代理程序,此时它们将会使用新的redis实例;

 (7)关掉被迁移走数据的原redis实例;

预分片

我们已经知道分片存在的一个问题,除非我们使用 Redis 作为缓存,增加和删除节点是一件很棘手的事情,使用固定的键和实例映射要简单得多。

然而,数据存储的需求可能一直在变化。今天我可以接受 10 个 Redis 节点(实例),但是明天我可能就需要 50 个节点。

因为 Redis 只有相当少的内存占用(footprint)而且轻量级(一个空闲的实例只是用 1MB 内存),一个简单的解决办法是一开始就开启很多的实例。即使你一开始只有一台服务器,你也可以在第一天就决定生活在分布式的世界里,使用分片来运行多个 Redis 实例在一台服务器上。

你一开始就可以选择很多数量的实例。例如,32 或者 64 个实例能满足大多数的用户,并且为未来的增长提供足够的空间。

这样,当你的数据存储需要增长,你需要更多的 Redis 服务器,你要做的就是简单地将实例从一台服务器移动到另外一台。当你新添加了第一台服务器,你就需要把一半的 Redis 实例从第一台服务器搬到第二台,如此等等。

使用 Redis 复制,你就可以在很小或者根本不需要停机时间内完成移动数据:

·       在你的新服务器上启动一个空实例。

·       移动数据,配置新实例为源实例的从服务。

·       停止你的客户端。

·       更新被移动实例的服务器 IP 地址配置。

·       向新服务器上的从节点发送 SLAVEOF NO ONE 命令。

·       以新的更新配置启动你的客户端。

·       最后关闭掉旧服务器上不再使用的实例。

Redis集群

由于数据量过大,单个复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展,每个复制集只负责存储数据集的一部分,这就是Redis的集群

1、在以前版本中,Redis的集群是依靠客户端分片来完成,但是这样会有很多缺点,比如维护成本高,需要客户端编码解决;增加、移除节点都比较繁琐等

2、Redis3.0新增的一大特性就是支持集群,在不降低性能的情况下,还提供了网络分区的可访问性和支持对主数据库故障的恢复。

3、使用集群后,都只能使用默认的0号数据库

4、每个redis集群节点需要两个tcp连接打开,正常的TCP端口用来服务客户端,例如6379,家10000的端口用作数据端口,必须保证防火墙打开这两个端口

5、Redis集群不保证强一致性,这意味着在特定的条件下,Redis集群可能会丢掉一些被系统收到的写入请求命令(Master传播命令返回OK后挂掉,slave还没有收到广播)

集群的架构

1、所有的Redis节点彼此互联,内部使用二进制协议优化传输速度和宽带

2、节点的fail是通过集群中超过半数的节点检测失效时才生效

3、客户端与redis节点直连,不需要中间的proxy层。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

4、集群把所有的物理节点映射到【0-16383】插槽上,集群负责维护:节点—插槽—值 的关系

集群操作的基本命令

CLUSTER INFO

CLUSTER nodeS

CLUSTER MEET  

CLUSTER FORGET

CLUSTER REPLICATE

CLUSTER SAVECONFIG

CLUSTER ADDSLOTS

CLUSTER DELSLOTS

CLUSTER FLUSHSLOTS

CLUSTER SETSLOT  NODE

CLUSTER SETSLOT  MIGRATING

CLUSTER SETSLOT  IMPORTING

CLUSTER SETSLOT  STABLE

CLUSTER KEYSLOT

CLUSTER COUNTKEYSINSLOT

CLUSTER GETKEYSINSLOT

MIGRATE 目的节点目的节点键名 数据库号码 超时时间 [copy] [replace]

关于Redis内存数据库分片的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: Redis内存数据库分片的示例分析

本文链接: https://www.lsjlt.com/news/65892.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis内存数据库分片的示例分析
    这篇文章将为大家详细讲解有关Redis内存数据库分片的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 软件下载地址 ·  &...
    99+
    2024-04-02
  • Redis内存数据库示例分析
    目录redies dict字典Redis的DB实现具体的实现器Redis持久化Aofredies dict字典 这是 Redis 最底层的结构,比如 1个DB 下面有 16个Dict...
    99+
    2022-12-19
    Redis内存数据库 Redis数据库
  • 内存型数据库Redis持久化的示例分析
    这篇文章主要为大家展示了“内存型数据库Redis持久化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“内存型数据库Redis持久化的示例分析”这篇文章吧...
    99+
    2024-04-02
  • Redis数据库分布式的示例分析
    这篇文章给大家分享的是有关Redis数据库分布式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问题:1-2亿数据需要缓存,如何设计?1 哈希取余分区2亿条记录就是2亿个k,v,假设有3台机器构成一个集群...
    99+
    2023-06-28
  • Redis多个数据库的示例分析
    小编给大家分享一下Redis多个数据库的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Redis多个数据库注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且...
    99+
    2024-04-02
  • 数据库存储过程的示例分析
    这篇文章给大家分享的是有关数据库存储过程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 select * from&nb...
    99+
    2024-04-02
  • Oracle数据库部分迁至闪存存储的示例分析
    这篇文章给大家分享的是有关Oracle数据库部分迁至闪存存储的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。环境:Oracle 11.2.0.4 RAC(2 nodes)...
    99+
    2024-04-02
  • redis数据类型的示例分析
    这篇文章主要介绍redis数据类型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Redis支持5种数据类型,它们描述如下:Strings - 字符串Redis的字符串是字节...
    99+
    2024-04-02
  • C标准库堆内存函数的示例分析
    这篇文章主要为大家展示了“C标准库堆内存函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C标准库堆内存函数的示例分析”这篇文章吧。概述C标准库堆内存函数有4个:malloc、free...
    99+
    2023-06-15
  • Linux物理内存外碎片的示例分析
    这篇文章主要介绍Linux物理内存外碎片的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、Linux物理内存外碎片化概述什么是Linux物理内存碎片化Linux物理内存碎片化包括两种:物理内存内碎片:指分配...
    99+
    2023-06-27
  • MySQL数据库的示例分析
    这篇文章给大家分享的是有关MySQL数据库的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、数据库概要数据库(Database)是存储与管理数据的软件系统,就像一个存入...
    99+
    2024-04-02
  • Hive数据存储的示例分析
    小编给大家分享一下Hive数据存储的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非...
    99+
    2023-06-03
  • Pandas数据存储的示例分析
    这篇文章主要为大家展示了“Pandas数据存储的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Pandas数据存储的示例分析”这篇文章吧。数据的存储数据可以有两种类型-连续的和离散的,这...
    99+
    2023-06-27
  • Redis缓存问题的示例分析
    这篇文章给大家分享的是有关Redis缓存问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Redis缓存的应用在我们的实际业务场景中,Redis 一般和其他数据库搭...
    99+
    2024-04-02
  • SQL Server数据库分区分表的示例分析
    这篇文章主要介绍SQL Server数据库分区分表的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、 需求说明将数据库Demo中的表按照日期字段进行水平分区分表。要求数据文件按一年一个文件存储,且...
    99+
    2023-06-14
  • 数据库中sqlnet.ora的示例分析
    小编给大家分享一下数据库中sqlnet.ora的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 一、例子1、SQLNET.AUTHENTICATION_SERVICES= (NT...
    99+
    2024-04-02
  • Redis分区的示例分析
    这篇文章主要介绍了Redis分区的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Redis是单线程的,如何提高多核CPU的利用率?可...
    99+
    2024-04-02
  • Redis内存碎片原理深入分析
    目录前言释放的内存去了哪里?什么是内存碎片?什么导致内存碎片?如何解决?总结前言 我们先来看一个问题, 假设Redis实例保存了5GB的数据,现在删除了2GB的数据,那么Redis...
    99+
    2023-02-01
    Redis内存碎片 Redis 内存
  • Node中堆内存分配的示例分析
    这篇文章将为大家详细讲解有关Node中堆内存分配的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。V8 垃圾回收简介首先,简单介绍一下V8垃圾回收器。内存的存储分配...
    99+
    2024-04-02
  • JavaScript中图片库的示例分析
    这篇文章将为大家详细讲解有关JavaScript中图片库的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、一个javascript 图片库实例,下面是效果图点击...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作