https://github.com/microsoft/garnet Skip to content Toggle navigation Sign in * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code Explore + All features + Documentation + GitHub Skills + Blog * Solutions For + Enterprise + Teams + Startups + Education By Solution + CI/CD & Automation + DevOps + DevSecOps Resources + Learning Pathways + White papers, Ebooks, Webinars + Customer Stories + Partners * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Pricing Search or jump to... Search code, repositories, users, issues, pull requests... Search [ ] Clear Search syntax tips Provide feedback We read every piece of feedback, and take your input very seriously. [ ] [ ] Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Name [ ] Query [ ] To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} microsoft / garnet Public * Notifications * Fork 26 * Star 1.2k * Garnet is a remote cache-store from Microsoft Research that offers strong performance (throughput and latency), scalability, storage, recovery, cluster sharding, key migration, and replication features. Garnet can work with existing Redis clients. microsoft.github.io/garnet/ License MIT license 1.2k stars 26 forks Branches Tags Activity Star Notifications * Code * Issues 3 * Pull requests 5 * Discussions * Actions * Wiki * Security * Insights Additional navigation options * Code * Issues * Pull requests * Discussions * Actions * Wiki * Security * Insights microsoft/garnet This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. main BranchesTags Go to file Code Folders and files Last Last Name Name commit commit message date Latest commit History 10 Commits .azure/pipelines .azure/pipelines .github/workflows .github/workflows benchmark/Resp.benchmark benchmark/Resp.benchmark libs libs main/GarnetServer main/GarnetServer metrics/HdrHistogram metrics/HdrHistogram playground playground samples samples test test website website .editorconfig .editorconfig .gitattributes .gitattributes .gitignore .gitignore CODE_OF_CONDUCT.md CODE_OF_CONDUCT.md Directory.Build.props Directory.Build.props Dockerfile Dockerfile Dockerfile.nanoserver-x64 Dockerfile.nanoserver-x64 Dockerfile.ubuntu-x64 Dockerfile.ubuntu-x64 Garnet.nuspec Garnet.nuspec Garnet.sln Garnet.sln Garnet.snk Garnet.snk LICENSE LICENSE NOTICE.md NOTICE.md README.md README.md SECURITY.md SECURITY.md SUPPORT.md SUPPORT.md View all files Repository files navigation * README * Code of conduct * MIT license * Security Garnet .NET CI Discord Shield Garnet is a new remote cache-store from Microsoft Research, that offers several unique benefits: * Garnet adopts the popular RESP wire protocol as a starting point, which makes it possible to use Garnet from unmodified Redis clients available in most programming languages of today, such as StackExchange.Redis in C#. * Garnet offers much better throughput and scalability with many client connections and small batches, relative to comparable open-source cache-stores, leading to cost savings for large apps and services. * Garnet demonstrates extremely low client latencies (often less than 300 microseconds at the 99.9th percentile) using commodity cloud (Azure) VMs with accelerated TCP enabled, which is critical to real-world scenarios. * Based on the latest .NET technology, Garnet is cross-platform, extensible, and modern. It is designed to be easy to develop for and evolve, without sacrificing performance in the common case. We leveraged the rich library ecosystem of .NET for API breadth, with open opportunities for optimization. Thanks to our careful use of .NET, Garnet achieves state-of-the-art performance on both Linux and Windows. This repo contains the code to build and run Garnet. For more information and documentation, check out our website at https:// microsoft.github.io/garnet. Feature Summary Garnet implements a wide range of APIs including raw strings (e.g., gets, sets, and key expiration), analytical (e.g., HyperLogLog and Bitmap), and object (e.g., sorted sets and lists) operations. It can handle multi-key transactions in the form of client-side RESP transactions and our own server-side stored procedures in C# and allows users to define custom operations on both raw strings and new object types, all in the convenience and safety of C#, leading to a lower bar for developing custom extensions. Garnet uses a fast and pluggable network layer, enabling future extensions such as leveraging kernel-bypass stacks. It supports secure transport layer security (TLS) communications using the robust SslStream library of .NET, as well as basic access control. Garnet's storage layer, called Tsavorite, was forked from our prior open-source project FASTER, and includes strong database features such as thread scalability, tiered storage support (memory, SSD, and cloud storage), fast non-blocking checkpointing, recovery, operation logging for durability, multi-key transaction support, and better memory management and reuse. Finally, Garnet supports a cluster mode of operation with support for sharding, replication, and dynamic key migration. [313800351-851be90b-e43a-40ca-ae56-7dc087cf6adc] Performance Preview We illustrate a few key results on our website comparing Garnet to leading open-source cache-stores. Design Highlights Garnet's design re-thinks the entire cache-store stack - from receiving packets on the network, to parsing and processing database operations, to performing storage interactions. We build on top of years of our prior research. Below is Garnet's overall architecture. [313767776-8d89f719-f86b-4b1f-81d1-1ae7bd450001] Garnet's network layer inherits a shared memory design inspired by our prior research on ShadowFax. TLS processing and storage interactions are performed on the IO completion thread, avoiding thread switching overheads in the common case. This approach allows CPU cache coherence to bring the data to the network, instead of traditional shuffle-based designs, which require data movement on the server. Garnet's storage design consists of two Tsavorite key-value stores whose fates are bound by a unified operation log. The first store, called the "main store," is optimized for raw string operations and manages memory carefully to avoid garbage collection. The second, and optional, "object store" is optimized for complex objects and custom data types, including popular types such as Sorted Set, Set, Hash, List, and Geo. Data types in the object store leverage the .NET library ecosystem for their current implementations. They are stored on the heap in memory (which makes updates very efficient) and in a serialized form on disk. In the future, we plan to investigate using a unified index and log to ease maintenance. A distinguishing feature of Garnet's design is its narrow-waist Tsavorite storage API, which is used to implement the large, rich, and extensible RESP API surface on top. This API consists of read, upsert, delete, and atomic read-modify-write operations, implemented with asynchronous callbacks for Garnet to interject logic at various points during each operation. Our storage API model allows us to cleanly separate Garnet's parsing and query processing concerns from storage details such as concurrency, storage tiering, and checkpointing. Garnet uses two-phase locking for multi-key transactions. Cluster Mode In addition to single-node execution, Garnet supports a cluster mode, which allows users to create and manage a sharded and replicated deployment. Garnet also supports an efficient and dynamic key migration scheme to rebalance shards. Users can use standard Redis cluster commands to create and manage Garnet clusters, and nodes perform gossip to share and evolve cluster state. Cluster is still work in progress. Next Steps Head over to our documentation site, or jump directly to the getting started or releases section. License This project is licensed under the MIT License, see the LICENSE file. Privacy Privacy information can be found at https://privacy.microsoft.com/ en-us/. Contributing This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https:// cla.opensource.microsoft.com. When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA. This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments. Trademarks This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies. Redis is a registered trademark of Redis Ltd. Any rights therein are reserved to Redis Ltd. Any use by Microsoft is for referential purposes only and does not indicate any sponsorship, endorsement or affiliation between Redis and Microsoft. About Garnet is a remote cache-store from Microsoft Research that offers strong performance (throughput and latency), scalability, storage, recovery, cluster sharding, key migration, and replication features. Garnet can work with existing Redis clients. microsoft.github.io/garnet/ Topics scalable key-value cache cluster store remote persistent concurrent low-latency cache-storage hash-table larger-than-memory Resources Readme License MIT license Code of conduct Code of conduct Security policy Security policy Activity Custom properties Stars 1.2k stars Watchers 20 watching Forks 26 forks Report repository Releases 1 Garnet v1.0.0 Latest Mar 18, 2024 Contributors 17 * @badrishc * @gmartinezsan * @vazois * @TalZaccai * @github-actions[bot] * @darrenge * @microsoftopensource * @yrajas * @TedHartMS * @PaulusParssinen * @JohannesEH * @bkochendorfer * @guitarrapc * @puilp0502 + 3 contributors Languages * C# 97.9% * C++ 1.5% * PowerShell 0.5% * JavaScript 0.1% * CMake 0.0% * CSS 0.0% Footer (c) 2024 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact * Manage cookies * Do not share my personal information You can't perform that action at this time.