动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

关于Redis 知识,这些你肯定不知道

07-28 17:16 229浏览
举报 T字号
  • 大字
  • 中字
  • 小字

与许多人一样,你可能会认为Redis只是一个缓存。今天讲一下关于redis知识这种观点已经沦为过时的错误观点了。本质上,Redis是一个NoSQL内存数据结构存储,可以持久存储在磁盘上。它可以用作数据库,缓存和消息代理。Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性。它通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。Redis是速度,弹性,可扩展性和灵活性的强大结合,Redis Enterprise可以将其进一步扩展。

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缓存中的到期计时器和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中,当键不存在时,将自动创建它们。

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数据库。

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的你还在犹豫什么,心动不如行动,快打开本站观看专业的Redis视频课程,开启你的Redis大神之路吧。

0人推荐
共同学习,写下你的评论
0条评论
上善若水
程序员上善若水

16篇文章贡献85593字

作者相关文章更多>

推荐相关文章更多>

MySQL开发规范

达芬奇09-04 11:38

必须掌握的30种SQL语句优化

不写代码你养我啊08-23 11:30

ES(Elasticsearch)支持PB级全文搜索引擎入门教程

HelloWorld09-29 17:28

Java面试中的hadoop面试题及答案整理

兔子06-15 17:15

数据库分类之速成篇

呵呵呀06-17 18:54

发评论

举报

0/150

取消