首页 > 数据库 >Garnet发布 Redis不再是唯一选择

Garnet发布 Redis不再是唯一选择

时间:2024-03-19 14:12:48浏览次数:32  
标签:存储 缓存 Garnet Redis 唯一 API Microsoft

Garnet 是 Microsoft Research 的远程缓存存储,提供强大的性能(吞吐量和延迟)、可扩展性、存储、恢复、集群分片、密钥迁移和复制功能。

Garnet 可以与现有的 Redis 客户端配合使用。

Garnet 是 Microsoft Research 推出的一种新型远程缓存存储,具有多种独特优势:

  • Garnet 采用流行的 RESP 线路协议作为起点,这使得可以从当今大多数编程语言(例如 C# 中的 StackExchange.Redis)中可用的未经修改的 Redis 客户端使用 Garnet。
  • 相对于同类开源缓存存储,Garnet 通过许多客户端连接和小批量提供更好的吞吐量和可扩展性,从而节省大型应用程序和服务的成本。
  • Garnet 使用启用了加速 TCP 的商品云 (Azure) VM 展示了极低的客户端延迟(在 99.9% 时通常低于 300 微秒),这对于现实场景至关重要。
  • Garnet 基于最新的 .NET 技术,具有跨平台、可扩展和现代化的特点。它被设计为易于开发和发展,而不会牺牲常见情况下的性能。我们利用 .NET 丰富的库生态系统来扩展 API,并提供开放的优化机会。由于我们对 .NET 的精心使用,Garnet 在 Linux 和 Windows 上都实现了最先进的性能。

该存储库包含构建和运行 Garnet 的代码。有关更多信息和文档,请访问网站:https://microsoft.github.io/garnet。

 

特性总结

Garnet 实现了广泛的 API,包括原始字符串(例如,获取、设置和密钥过期)、分析(例如,HyperLogLog 和 Bitmap)和对象(例如,排序集和列表)操作。它可以以客户端 RESP 事务和我们自己的 C# 服务器端存储过程的形式处理多密钥事务,并允许用户在原始字符串和新对象类型上定义自定义操作,所有这些都以 C# 的便利性和安全性实现,导致开发自定义扩展的门槛较低。

Garnet 使用快速且可插拔的网络层,支持未来的扩展,例如利用内核旁路堆栈。它使用强大的 .NET SslStream 库支持安全传输层安全 (TLS) 通信以及基本访问控制。 Garnet 的存储层称为 Tsavorite,是从我们之前的开源项目 FASTER 中分叉出来的,包括强大的数据库功能,例如线程可扩展性、分层存储支持(内存、SSD 和云存储)、快速非阻塞检查点、恢复、操作日志记录以实现持久性、多键事务支持以及更好的内存管理和重用。最后,Garnet 支持集群操作模式,支持分片、复制和动态密钥迁移。

 

 性能预览

我们在网站上展示了一些关键结果,将 Garnet 与领先的开源缓存存储进行比较。

 

 设计亮点

Garnet 的设计重新思考了整个缓存存储堆栈——从网络上接收数据包,到解析和处理数据库操作,再到执行存储交互。我们建立在我们之前多年研究的基础上。下面是Garnet的整体架构。

 

Garnet 的网络层继承了受我们之前对 ShadowFax 研究启发的共享内存设计。 TLS 处理和存储交互在 IO 完成线程上执行,避免了常见情况下的线程切换开销。这种方法允许 CPU 缓存一致性将数据传输到网络,而不是传统的基于随机播放的设计,后者需要在服务器上移动数据。

Garnet的存储设计由两个Tsavorite键值存储组成,它们的命运由统一的操作日志绑定。第一个存储称为“主存储”,针对原始字符串操作进行了优化,并仔细管理内存以避免垃圾收集。第二个也是可选的“对象存储”针对复杂对象和自定义数据类型进行了优化,包括排序集、集合、哈希、列表和地理等流行类型。对象存储中的数据类型利用 .NET 库生态系统来实现其当前的实现。它们存储在内存中的堆上(这使得更新非常高效)并以序列化形式存储在磁盘上。未来,我们计划研究使用统一的索引和日志来简化维护。

Garnet 设计的一个显着特点是其窄腰 Tsavorite 存储 API,用于在顶部实现大型、丰富且可扩展的 RESP API 表面。该 API 包含读取、更新插入、删除和原子读取-修改-写入操作,通过 Garnet 的异步回调实现,以便在每个操作期间的各个点插入逻辑。存储 API 模型使我们能够将 Garnet 的解析和查询处理问题与并发、存储分层和检查点等存储细节完全分开。 Garnet 对多密钥交易使用两阶段锁定。

 集群模式

除了单节点执行之外,Garnet还支持集群模式,允许用户创建和管理分片和复制部署。 Garnet 还支持高效、动态的密钥迁移方案来重新平衡分片。用户可以使用标准的Redis集群命令来创建和管理Garnet集群,节点执行gossip来共享和演化集群状态。集群工作仍在进行中。

License

该项目已获得 MIT 许可证的许可,请参阅许可证文件。

 隐私

隐私信息可在 https://privacy.microsoft.com/en-us/ 找到。

 贡献

该项目欢迎贡献和建议。大多数贡献都要求您同意贡献者许可协议 (CLA),声明您有权并且实际上授予我们使用您的贡献的权利。有关详细信息,请访问 https://cla.opensource.microsoft.com。

当您提交拉取请求时,CLA 机器人将自动确定您是否需要提供 CLA 并适当地修饰 PR(例如状态检查、评论)。只需按照机器人提供的说明进行操作即可。您只需使用我们的 CLA 在所有存储库中执行一次此操作。

该项目采用了微软开源行为准则。有关详细信息,请参阅行为准则常见问题解答或联系 [email protected] 提出任何其他问题或意见。

 商标

该项目可能包含项目、产品或服务的商标或徽标。 Microsoft 商标或徽标的授权使用须遵守且必须遵循 Microsoft 的商标和品牌指南。在此项目的修改版本中使用 Microsoft 商标或徽标不得引起混淆或暗示 Microsoft 赞助。对第三方商标或徽标的任何使用均须遵守这些第三方的政策。

Redis 是 Redis Ltd 的注册商标。其中的任何权利均归 Redis Ltd 保留。Microsoft 的任何使用仅供参考,并不表明 Redis 与 Microsoft 之间有任何赞助、认可或从属关系。

 

github地址: https://github.com/microsoft/garnet

标签:存储,缓存,Garnet,Redis,唯一,API,Microsoft
From: https://www.cnblogs.com/linshuli/p/18082630

相关文章

  • 好用的Redis 客户端工具有几个? 这里推荐两三个
    微信公众号:数据库杂记   个人微信: iiihero我是iihero. 也可以叫我Sean.iihero@CSDN(https://blog.csdn.net/iihero) Sean@墨天轮 (https://www.modb.pro/u/16258)数据库领域的资深爱好者一枚。水木早期数据库论坛发起人 db2@smth,早期多年水木论坛数据库版版主。......
  • # Docker安装使用Redis
    拉取最新版本redisdockerpullredis:7.2.4查看镜像dockerimages新建本地挂载配置文件夹(位置随意)1、创建文件夹(位置随意):data、confredis默认配置只能够本地连接、不能进行远程访问需要手动挂载redis配置文件mkdir-p/docker-root/redis_6379/datamkdir-p/d......
  • Redis第三弹,定时删除1.优先级队列(堆)2.基于时间轮实现的定时器​编辑Type指令(返回key对
    目录定时删除1.优先级队列(堆)2.基于时间轮实现的定时器​编辑Type指令(返回key对应的数据类型)redis的数据类型hsetkeyfieldvalue(这里是使用hash作为数据结构)小结定时删除redis并未实现定时器的方式,实现定时器的方式,实现过期key删除,若多个key过期,也可通过一个......
  • Redis
    一、Redis命令1.Redis数据结构Redis是一个key-value的数据库,key一般是String类型,value的类型多种多样:2.Redis通用命令通用命令是部分数据类型的,都可以使用的指令,常见的有:KEYS:查看符合模板的所有key,不建议在生产环境中使用DEL:删除一个指定的keyEXISTS:判断key是否存在......
  • springboot集成redis
    1.导入spring-boot-starter-data-redis起步依赖2.在配置文件中,配置redis连接信息3.调用API(StringRedisTemplate)完成字符串的存取操作```//把token存储在redis中ValueOperations<String,String>operations=stringRedisTemplate.opsForValue();operations.set(token......
  • 解决安装Redis之后设置密码,报(error) ERR Client sent AUTH, but no password is set
    在安装完成Redis后,需要登录auth账户,验证是否安装成功。在redis目录下redis.conf文件找到requirepass,追加一行,输入requirepass123456,即为登录密码,重启redis服务再登录即可。但是并没有成功,后来发现是需要在命令行再次设置密码才行解决步骤如下:1、启动redis服务2、cmd命令行切......
  • Springboot+Redis:实现缓存 减少对数据库的压力
    ......
  • Mysql,MongoDB,Redis的横纵向对比
    一,什么是MysqlMysql是一款安全,可以跨平台,高效率的数据库系统,运行速度高,安全性能高,支持面向对象,安全性高,并且成本比较低,支持各种开发语言,数据库的存储容量大,有许多的内置函数。二,什么是MongoDBMongoDB是基于分布式文件存储的数据库,是一个介于关系型数据库和非关系型数据库之......
  • 解决问题:java、mysql、docker、linux、redis、solr适合初级或者刚入门的大学生
    java、mysql、redis、linux、docker中的问题Java问题解决,idea问题解决调试,服务器问题解决,项目部署,项目调试linux服务器上的安装以及运行环境的部署docker的部署可做技术栈:java开发:javaweb,jsp,servlet,javase,spring,springboot,ssm服务器:linux问题docker问题,To......
  • 鸿鹄电子招投标系统源码实现与立项流程:基于Spring Boot、Mybatis、Redis和Layui的企业
    随着企业的快速发展,招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求,建立一个公平、公开、公正的采购环境至关重要。在这个背景下,我们开发了一款电子招标采购软件,以最大限度地控制采购成本,提高招投标工作的公开性和透明性,并确保符合国家电子招投标......