redis缓存数据库数据
与许多其他人一样,您可能会认为Redis只是一个缓存 。 这种观点已经过时了。
本质上,Redis是一个NoSQL内存数据结构存储,可以持久存储在磁盘上。 它可以用作数据库,缓存和消息代理。 Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性。 它通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。
Redis核心数据模型是键值,但支持许多不同类型的值:字符串,列表,集合,排序集合,哈希,流,HyperLogLogs和位图。 Redis还支持半径查询和流的地理空间索引。
[ 也在InfoWorld上: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中,后者如上所述对群集进行了其他速度改进。
访问控制列表(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
您可以通过下载并编译源代码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企业云
安装Redis Enterprise的最快方法不是完全安装它,而是在Redis Enterprise Cloud中运行它。 当我自己尝试进行审查时,最初收到了Redis 5实例; 我不得不要求升级到Redis 6。
redis缓存数据库数据