vlambda博客
学习文章列表

Redis 6:高速数据库,缓存和消息代理

二线码农
码农相关技术分享,科技前沿分享,知识分享!
40篇原创内容
Official Account

Redis是速度,弹性,可扩展性和灵活性的强大结合,Redis Enterprise可以将其进一步扩展

http://www.nncjzx.com/1084.html


Redis 6:高速数据库,缓存和消息代理

与许多其他人一样,您可能会认为Redis只是一个缓存。这种观点已经过时了。

本质上,Redis是一种NoSQL内存数据结构存储,可以持久存储在磁盘上。它可以用作数据库,缓存和消息代理。Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性。它通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。

核心Redis数据模型是键值,但支持许多不同类型的值:字符串,列表,集,排序集,哈希,流,HyperLogLogs和位图。Redis还支持半径查询和流的地理空间索引。

为了开源Redis,Redis Enterprise添加了用于提高速度,可靠性和灵活性的功能,以及云数据库即服务。Redis Enterprise线性扩展至每秒数亿次操作,具有本地延迟的双活全局分布,提供Flash上的Redis以支持基于磁盘数据库的基础架构成本支持大型数据集,并基于已建数据库提供99.999%的正常运行时间-耐用性和一位数秒的故障转移。

此外,Redis Enterprise扩展了核心Redis功能,以通过RediSearch,RedisGraph,RedisJSON,RedisTimeSeries和RedisAI等模块支持任何数据建模方法,并允许在模块与核心之间以及模块与核心之间执行操作。提供所有这些信息,同时将数据库等待时间保持在一毫秒以内。

Redis核心功能和用例

Redis现在可以用作数据库,缓存和消息代理,这意味着什么?这些角色支持哪些用例?

缓存是Redis的经典功能。本质上,Redis位于基于磁盘的数据库的前面,并保存查询和结果。应用程序首先检查Redis缓存中是否有存储的结果,然后查询基于磁盘的数据库以获取当前不在缓存中的结果。考虑到Redis的亚毫秒级响应率,这通常是应用程序性能的一大胜利。Redis缓存中的过期计时器和LRU(最近最少使用)驱逐有助于使缓存保持最新状态并有效地使用内存。

会话存储是现代Web应用程序的重要组成部分。在这里,可以方便地保留有关用户及其与应用程序交互的信息。在Web场体系结构中,直接在Web服务器上托管会话存储要求将用户“粘”在同一台后端服务器上以用于将来的请求,这可能会限制负载平衡器。通过将基于磁盘的数据库用于会话存储,无需将会话绑定到单个Web服务器,而是引入了额外的延迟源。将Redis(或任何其他快速内存数据库)用作会话存储通常会导致低延迟,高吞吐量的Web应用程序体系结构。

Redis可以使用三种不同的机制充当消息代理,而Redis作为消息代理的重要用例之一就是充当微服务之间的粘合剂。Redis具有低开销的发布/订阅通知机制,该机制可促进即发即弃消息,但在目标服务未侦听时不起作用。对于更持久的,类似于Kafka的消息队列,Redis使用stream,它们是单个键中按时间戳排序的键值对。Redis还支持存储在单个键上的元素的双向链接列表,这些列表可用作先进先出(FIFO)队列。尽管缓存应该在与消息队列不同的Redis实例中运行,但微服务可以并且经常将Redis用作缓存以及将其用作消息代理。

基本复制允许Redis在不使用Redis Enterprise版本的集群技术的情况下进行扩展。Redis复制使用领导者跟随模型(也称为主从模型),该模型默认情况下是异步的。客户端可以使用WAIT命令强制进行同步复制,但是即使这样也不能使Redis在所有副本之间保持一致。

Redis具有服务器端Lua脚本,允许程序员扩展数据库而无需编写C模块或客户端代码。基本的Redis事务允许客户端使用MULTI和EXEC命令定义并运行命令序列,从而将命令序列声明为不可中断的单元。这是一样的使用回滚关系事务。

Redis具有用户可以选择的不同级别的磁盘持久性。RDB(Redis数据库文件)持久性按指定的时间间隔获取数据库的时间点快照。AOF(仅附加文件)持久性记录服务器接收的每个写操作。您可以同时使用RDB和AOF持久性来获得最大的数据安全性。

Redis Sentinel本身是一个分布式系统,可为Redis提供高可用性。它监视主实例和副本实例,在出现问题时发出通知,并在主实例停止工作时自动进行故障转移。它还充当客户端的配置提供程序。

Redis Cluster提供了一种运行Redis安装的方法,在该安装中,数据会在多个Redis节点之间自动分片。Redis群集还在分区期间提供了一定程度的可用性,尽管如果大多数主服务器不可用,该群集也会停止运行。

如前所述,Redis是一个键值存储,它支持将字符串,列表,集合,排序集合,哈希,流,HyperLogLogs和位图作为值。最简单和最常见的用例之一是使用整数值作为计数器。为此,INCR(增量),DECR(减量)和其他单个操作是原子操作,因此在多客户端环境中是安全的。在Redis中,当键不存在时,将自动创建它们。

> SET connections 10
OK
> INCR connections
(integer) 11
> INCR connections
(integer) 12
> DEL connections
(integer) 1
> INCR connections
(integer) 1
> INCRBY connections 100
(integer) 101
> DECR connections
(integer) 100
> DECRBY connections 10
(integer) 90

在Try Redis教程中,其他类型的值结构也有其自己的示例。当我自己尝试时,该教程正在进行维护。我希望随着Redis Labs参与最初的社区工作,该问题将很快得到解决。

Redis有许多附加模块,包括(按流行程度从高到低的顺序)神经网络模块,全文搜索,SQL,JSON数据类型和图形数据库。模块的许可证由作者设置。与Redis一起使用的某些模块主要是Redis Enterprise的模块。

Redis Enterprise增强功能

使用无共享集群架构,Redis Enterprise提供了无限的线性扩展,而不会在横向扩展的体系结构中施加任何非线性开销。您可以在单个群集节点上部署多个Redis实例,以充分利用多核计算机体系结构。Redis Enterprise已证明可将每秒扩展到数亿次操作,并且正常运行时间为五个九(99.999%)。Redis Enterprise执行自动重新分片和重新平衡,同时为事务负载保持低延迟和高吞吐量。

Redis Enterprise为全局分布的数据库提供主动-主动部署,从而可以跨多个地理位置对同一数据集进行同时的读写操作。为了提高效率,Redis Enterprise可以使用无冲突的复制数据类型(CRDT)来维护数据的一致性和可用性。Riak和Azure Cosmos DB是另外两个支持CRDT的NoSQL数据库。

尽管有大量关于CRDT的学术文献,但我承认我并不完全了解它们的工作方式或原因。的简短总结什么,他们做的是CRDTs可以解决不一致性不进行干预,用数学推导的一套规则。对于需要共享状态的大容量数据,CRDT很有用,并且可以使用地理位置分散的服务器来减少用户的延迟。

Redis和Redis Enterprise之间的主要区别之一是Redis Enterprise 将数据路径与群集管理分离。这改善了两个组件的操作。数据路径基于驻留在每个群集节点上的多个零延迟,多线程代理,以掩盖系统的基础复杂性。集群管理器是一项管理功能,它提供诸如重新分片,重新平衡,自动故障转移,机架感知,数据库供应,资源管理,数据持久性配置以及备份和恢复之类的功能。由于集群管理器与数据路径组件完全脱钩,因此对其软件组件的更改不会影响数据路径组件。

Flash上的Redis是Redis Enterprise的一项功能,可以大大降低Redis的硬件成本。您无需花大量钱购买RAM或限制Redis数据集的大小,您可以在Flash上使用Redis将经常访问的热数据放置在内存中,并将较冷的值放置在Flash或持久性内存(例如Intel Optane DC)中。

Redis Enterprise模块包括RedisGraph,RedisJSON,RedisTimeSeries,RedisBloom,RediSearch和RedisGears。所有Redis Enterprise模块也可与开源Redis一起使用。

Redis 6有什么新功能?

Redis 6是一个重要的发行版,既适用于开源版本,也适用于Redis Enterprise商业版本。性能新闻是使用线程I / O,这使Redis 6的速度比Redis 5(没有懈怠)提高了2倍。这可以延续到Redis Enterprise中,Redis Enterprise对如上所述的群集具有额外的速度改进。

访问控制列表(ACL)的添加为Redis 6提供了用户的概念,并允许开发人员编写更安全的代码。Redis Enterprise 6基于ACL来提供基于角色的访问控制(RBAC),这对于程序员和DBA更加方便。

Redis 6中的主要新功能

Redis 6.0开源

  • 访问控制列表(ACL)

  • 改善驱逐

  • 线程I / O

  • RESP3协议

Redis Enterprise 6.0

  • 基于角色的访问控制(RBAC)

  • 扩展主动-主动

  • 超级日志

  • 溪流

Redis Enterprise 6.0在主动-主动数据库中增加了对Streams数据类型的支持。这样既可以实现高可用性,又可以实现低延迟,同时在多个地理位置的多个数据中心中进行实时流的读写操作。

RedisGears是一个动态框架,使开发人员能够编写和执行在Redis中实现数据流的功能。它使用户可以编写Python脚本以在Redis中运行,并支持多种用例,包括后写(Redis充当基于磁盘的数据库的前端),实时数据处理,流和事件处理,操作跨数据结构和模型,以及AI驱动的交易。

RedisAI是在Redis内部运行的模型服务引擎。它可以使用PyTorch,TensorFlow和ONNX模型执行推理。RedisAI可以在CPU和GPU上运行,并可以启用欺诈检测,异常检测和个性化等用例。

Redis 6:高速数据库,缓存和消息代理
在Redis Enterprise Cloud中创建新角色。RBAC易于管理该ACL。

安装Redis

您可以通过下载并编译源tarball或从Docker Hub中拉取Docker映像来安装Redis 。Redis可以在Linux,MacOS,OpenBSD,NetBSD和FreeBSD上进行编译和使用。该源代码库是在GitHub上。在Windows上,您可以在Docker容器中或在Windows Subsystem for Linux(WSL)下运行Redis,这需要Windows 10。

您可以在Linux或Docker容器中安装Redis Enterprise。Linux下载采用二进制软件包(取决于Linux的风格,为DEB或RPM)和用于集群安装的Bash Shell脚本的形式。脚本检查安装所需的四个内核和15 GB RAM。

Redis 6:高速数据库,缓存和消息代理
Redis Enterprise安装在Docker和Linux系统上。该页面显示了Redis Enterprise 5.0安装程序,因为Redis Enterprise 6.0安装程序仍处于发行候选阶段,尽管在我询问时私下为我提供了Redis Enterprise 6.0 RC的Linux安装程序。

Redis企业云

安装Redis Enterprise的最快方法不是完全安装它,而是在Redis Enterprise Cloud中运行它。当我自己尝试进行审查时,最初收到了Redis 5实例;我不得不要求升级到Redis 6。

Redis 6:高速数据库,缓存和消息代理
您可以在Redis Enterprise Cloud中免费运行一个小型实例,也可以按取决于配置的RAM量的月租价格运行一个功能齐全的实例。虽然此说明说Redis模块不适用于低吞吐量的Essentials环境,但是Redis Labs当前从AWS Mumbai区域开始在Essential级别推出Module支持。
Redis 6:高速数据库,缓存和消息代理
在Essentials级别,实例的范围从30 MB RAM(免费)到5 GB RAM(每月338美元)及以上。Redis Enterprise Cloud实例在AWS,GCP和Azure上可用。您可以选择自己的地区。
拥有Redis Enterprise Cloud订阅后,创建数据库很简单,只需为数据库命名,选择Redis或Memcached协议,选择复制和持久性选项,选择数据驱逐策略以及设置使用警报即可。
查看Redis Enterprise Cloud数据库配置会显示设置以及端点链接。您可以将此链接复制到客户端以建立连接。

Redis基准

就像您对使用简单键值架构的基于RAM的数据库所期望的那样,Redis在基准测试中表现非常出色。令人惊喜的是,它在Flash上的Redis配置中也表现出色。这也适用于带有Flash的Redis Enterprise Cloud配置。

在使用26个m4.16x大节点的全RAM Amazon EC2测试中,一个512碎片的Redis Enterprise 5.0数据库以每秒不到5毫秒的延迟实现了每秒5000万次操作。这些测试还证明了接近线性的可伸缩性。该基准对Redis 6.0的更新当前不可用。

对于Flash上的Redis案例,三星NVMe SSD和Intel NVMe SSD(使用Redis Enterprise 4.3)在不同条件下有单独的基准测试。同样,Redis 6.0的更新当前不可用。

对于使用20%RAM和80%Flash的Samsung NVMe测试,在一台服务器上的结果是每秒超过200万次操作,超过1 GB的磁盘吞吐量和超过1 Gbps的网络吞吐量,并且延迟不到1毫秒。对于使用10%RAM和90%Flash的Intel NVMe测试,结果是平均每秒进行325万次操作,单个服务器的平均延迟为0.92毫秒,同时读写超过1 GB的磁盘带宽。https://imasdk.googleapis.com/js/core/bridge3.447.1_en.html#goog_156908961300:00 of 08:34交易量0% 

Redis客户端支持

Redis拥有适用于所有流行编程语言的客户端库,其中许多可能是您从未学过的。对于许多语言,有很多选择-但是清单有助于推荐客户。如果您正在使用Redis集群,请选择包含集群支持的客户端库,以获取最大的灵活性。

总而言之,Redis是一个高速数据库,缓存和消息代理。虽然Redis最初只是作为内存缓存开始的,但是现在它可以保留到磁盘上,并且在Redis Enterprise中,可以将RAM和Flash合并到其活动存储中。 

Redis可以使用领导者跟随者模型进行水平缩放,最终实现一致性。Redis Enterprise提供了一种无共享的集群架构,该架构可以进行线性扩展,自动重新分片和重新平衡,同时保持低延迟和高吞吐量以处理事务负载,支持双活安装,并可以使用无冲突的复制数据类型来保持更好的一致性。跨地理分布集群的数据可用性。Redis Enterprise可以以五分之九(99.999%)的正常运行时间每秒实现数亿次操作。

Redis和Redis Enterprise都支持许多附加模块。这些有效地使Redis成为具有共享数据的多模型(键值,图形,JSON,时间序列和全文搜索)数据库。最新的模块支持Python和AI推理的可编程性。

尽管Redis是免费的,并且Redis Enterprise的价格是按分区计算的,但是如果您将硬件和运营支持的成本考虑在内,Redis Enterprise通常会提供更好的投资回报率(这要归功于Flash上的Redis和更容易的集群管理)。数据库。

– 

费用:  Redis:免费开源(BSD许可证)。Redis企业软件:30天免费试用;之后按数据库分片定价。Redis Enterprise Cloud:免费(30 MB)至$ 32 /小时(200 GB,1,500 ops / sec)。 

平台:  Redis开源:Linux,MacOS,OpenBSD,NetBSD,FreeBSD。Redis企业软件:Linux / RHEL / CentOS / Amazon Linux;Kubernetes,Docker或LXC; 关键云铸造厂;AWS和Azure市场。Redis企业云:AWS,Azure,GCP。