• 技术
  • Redis公司
什么是Redis™?概述

内存数据库还是数据结构服务器?

Redis是一个快速的内存数据库和缓存,在BSD许可下开源,用C编写,并针对速度进行了优化。Redis的名字来自“REmote DIctionary Server”。它支持实时流式传输用例,还可以用于存储有关用户配置文件、身份验证信息、查看历史记录、CDN清单文件的元数据,以便将视频流式传输给数百万用户,等等。

Redis通常被称为数据结构服务器,因为它的核心数据类型与编程语言中的数据类型类似,如字符串、列表、字典(或散列)、集和排序集。它还为近似计数、地理定位和流处理提供了许多其他数据结构和功能。

在NoSQL数据库中,Redis的各种数据结构最接近程序员在应用程序和算法中最常用的本地数据结构。这种易用性使其非常适合于快速开发和快速应用程序,因为核心数据结构很容易在流程和服务之间共享。

默认情况下,Redis将数据存储在内存中,默认为定期磁盘持久性。由于Redis将数据持久化到磁盘,它可以作为许多用例的经典数据库以及缓存。当Redis满时,它会向客户端返回一个错误,但可以将其配置为缓存,以便在新数据传入时弹出较旧且不太重要的数据。在这两种情况下,可用内存的大小是限制其使用的主要因素。

Redis主要用于什么?

智能缓存

Redis通常用作缓存,将频繁访问的数据存储在内存中,以便应用程序能够响应用户。Redis能够指定您希望保留数据的时间长度,以及首先删除哪些数据,因此它支持一系列智能缓存模式。

智能缓存有很多原因,它对用户体验、用户生产力、反弹率和零售收入都有很大影响。关于这些影响的研究汇编于我们关于内存数据库优势的白皮书.

数据过期和收回策略

Redis中的数据结构可以标记为以秒为单位设置的生存时间(TTL),之后将被删除。提供了一系列可配置的智能“逐出策略”。在这些用TTL标记的非永久数据下,可以在没有TTL的其他数据之前考虑,TTL不允许创建内存对象的分层层次结构。

在某些用例中,最近最少使用(LRU)或最不频繁使用(LFU)度量对于逐出更有意义。Redis还提供了这些缓存策略选项的可调概率实现。

Redis的其他用途和功能是什么?

Redis的内存中架构是一个密钥空间,其中包含由其密钥拥有的任意内存中对象。Redis的多功能架构使其能够不断发展,添加与此模型相匹配的额外功能。

流和流处理

Redis通过其列表和发布/订阅消息传递(见下文)创建了一个出色的任务队列和消息代理。在Redis 5.0版中,受Apache Kafka项目的启发,流和流处理被添加到了其功能集中。与卡夫卡主题类似,工作流可以有处理“消费者”组,他们可以检查工作并确认工作何时完成。如果在一段时间到期后没有收到确认,则其他用户可以选择此工作以确保完成。

这使内存中的Kafka-like模式成为可能,对于响应性非阻塞用户界面体验尤其有用。

发布和订阅消息(发布/订阅)

Pub/Sub消息传递允许消息传递到频道,并允许该频道的所有订阅者接收该消息。此功能使信息能够在您的基础结构中快速流动,而不会因未存储消息而占用数据库中的空间。因此,您可以让服务了解其他基础设施或应用程序的负载,或者更新游戏分数并传递通知。

Lua脚本

Redis有一个脚本工具,可以用Lua语言编写和执行自定义脚本。这允许用户以快速执行脚本的形式向Redis本身添加功能。Lua具有极快的初始化速度,使脚本能够在数据上执行各种任务,而不会显著降低Redis的速度。由于核心Redis进程是单线程的,这确保了原子操作。

地理空间特征

Redis提供了一系列地理空间索引数据结构和命令。存储纬度和经度坐标,用户可以查询对象之间的距离或查询给定点半径内的对象。这些命令能够以各种格式(英尺、公里等)返回其值。

Redis的速度允许快速更新这些数据点。在骑乘共享应用程序中,这些功能可用于将用户与附近的驾驶员联系起来,然后在他们靠近或骑乘期间提供实时更新。Redis正与主要运输和交付公司一起用于此用例。

Hyperloglog(超级日志)

超日志数据结构允许在比保留完整唯一项集小得多的空间中进行近似集计数。一个简单的计数器可以加倍计数,一组用户ID或IP将占用大量空间。超日志允许极少量的内存来保存唯一对象的良好近似值。

位图

位图允许将True和False值高效存储为Redis字符串中的1或0。通过允许有效地存储这种类型的布尔数据,许多用例都是可能的。

位图可以通过一些内容(如在线课程或大型下载)有效地存储用户的进度。另一个用途是在应用程序中表示某人联系人的联机/脱机状态。

企业成熟度

Redis的创建者Salvatore Sanfilippo,或Antirez,最初在年起草了一个内存数据存储数百条TCL线路对于初创公司来说。2009年,他释放用C语言写给开源社区的版本。

在此后的十年中,Redis已经经历了多年的开发和测试,并在企业中实际使用,为全球最大的公司和服务处理了数万亿笔交易。Redis 6.0包括节点之间的SSL/TLS加密通信和用于安全部署的细粒度访问控制列表(ACL)。

您可以通过启动我们的免费试用Redis,并将其转一圈。

 

谁在使用Redis?

Redis用户

Redis被许多网站用作缓存,但也被一些最大的骑乘共享公司和社交网络使用。2020年StackOverflow开发商调查20.5%的开发者表示他们目前正在使用Redis。在过去四年的调查中,Redis还被开发人员评为最受欢迎的数据库技术。

真爱

值得深入研究最后一点。该调查对“爱”的定义是,开发者目前是否正在使用该技术,并计划再次使用该技术。Redis在所有数据库技术中一直是使用它、了解它并且非常喜欢它的人中比例最高的,他们计划在未来再次使用它。

出色的界面

Redis对开发人员的吸引力之一是其简单优雅的命令界面。埃里克·雷德蒙德和吉姆·威尔逊在他们的书中总结了这一点七周内七个数据库:

它不仅容易使用;这是一种乐趣。如果API是程序员的UX,那么Redis应该与MacCube一起放在现代艺术博物馆。

Redis简化了服务和进程之间通用基础数据结构的高速使用。使用Lua脚本和模块,Redis成为数据的可扩展领域特定语言(DSL)。

Instaclustr管理的Redis服务简化了部署。联系讨论我们为您的应用程序提供的托管Redis服务。

联系我们

如果是内存中的,为什么它会一直保存到磁盘上?

Redis可以配置为以两种格式写入磁盘,一种是二进制格式,另一种是“仅附加文件”(AOF)格式。二进制格式镜像内存中的内容,默认情况下处于启用状态。AOF文件可以在配置中打开,它是所有命令的简单日志,可以回放这些命令以将节点返回到以前的状态。两者都可以配置为或多或少频繁地写入磁盘。

热重启

对于关键缓存部署,特别是在Redis位于较慢基础架构前面的情况下,这些磁盘持久性设施允许“热重启”。如果没有热重启功能,处理超过其背后基础设施容量的流量的空缓存将通过所有流量,从而可能导致基础设施不堪重负。

Redis作为主数据库

如果数据大小和风险状况众所周知,并且与Redis的磁盘持久性模型相匹配,那么它可以作为主数据库。在这种情况下,必须仔细考虑具有数据复制、逐出策略设置、使用磁盘持久性和自动备份的集群拓扑。可以将磁盘持久性配置为在每次新写入时写入磁盘,但这可能会降低性能。

它是如何群集的?

Redis提供了多种扩展和可用性设施,确保了性能的提高,因为它可以高效地存储和检索会话数据,即使是大量数据。一个是主/辅服务器设置,以及名为Redis Sentinel的服务。最具可扩展性的解决方案是使用水平集群,该集群内置了在集群中跨节点传播数据的复制。

在缓存存储在其他位置的数据时,有时最好不使用复制来最大化集群拓扑中的存储。缓存的热重启功能可以处理任何可能的节点重启,而其他数据存储可以作为数据的规范副本。

它是开源的吗?还有什么替代品?

在堆栈中使用纯开源是避免供应商锁定并仍然获得高性能技术的一个好方法。Redis在BSD 3条款许可下是完全开源的,这无疑有助于它的普及。

这个Memcached内存该项目是一个可靠的开源缓存,是Redis最接近的竞争对手,尽管它在开发人员调查和GitHub上不太受欢迎。它侧重于键/值缓存用例,缺乏Redis的额外数据结构或持久化到磁盘以进行热重启的能力。由于键/值用例中的内存性能类似,而且Redis支持许多额外功能,因此更常见的选择是使用Redis。

何时不应使用Redis?

Redis并非真正用于缓存静态资产

Redis并不是真正用于缓存图像、CSS或视频文件等网站的静态资产。这些资产的交付最好通过web服务器配置或使用内容交付网络(CDN)进行优化。

延迟不是问题

当延迟根本不是问题时,Redis的吸引力可能不如可以存储到磁盘的Apache Cassandra等数据库。在你结束响应时间之前,不要以某种方式影响你的用例,你应该阅读我们的白皮书对延迟的研究进行了全面的概述。

用于存储超大数据集或某些类型的关键数据

Redis可以保存关键数据,但作为数据存储,如果数据大小超过集群的内存容量,它可能不是最佳选择。

对于关键数据,Redis集群可以配置数据复制,以便跨节点保存多个数据副本。此外,Redis的磁盘持久性可以配置为在每次写入时都发生,尽管这会影响性能。备份磁盘上的文件可以增加另一层数据安全。在这种情况下,Redis仍然可以作为另一个数据存储前的快速缓存。

结论

Redis是一种非常流行、快速、灵活的内存数据库,具有大量优秀的数据结构。这些功能使其成为最通用的NoSQL数据库之一,具有其他内存竞争对手的超集功能。
您可以尝试使用我们的Redis免费试用取得联系如果你有任何问题。

为您的数据基础架构提供透明、公平和灵活的定价请参阅此处的Instaclustr定价

没有试用集群?

免费启动群集