除了Redis,你還知道哪些鍵值數據庫?
在 DB-Engines 上挑選了五個 開源的 key-value 數據庫,一起來看看吧。
圖片
1. Redis
圖片
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.
Redis是一個存儲在磁盤上的內存數據庫。數據模型是鍵-值,但支持許多不同類型的值:字符串、列表、集合、排序集、哈希、流、HyperLogLogs、位圖。
2009 年發行,C 語言編寫。
特點
- 提供多種數據結構:字符串、哈希、列表、集合、有序集合等
- 支持Lua腳本,事務,發布/訂閱(pub/sub)模式,可持久化
- 高可用性和分布式功能(通過Redis Sentinel和Redis Cluster)
優點
- 數據結構豐富,讀寫性能高
- 社區活躍,生態系統豐富
- 靈活的持久化策略
- 支持復雜操作和事務
缺點
- 主要基于內存,存儲大量數據時成本較高
- 單線程模型在CPU密集型任務下可能是瓶頸
- 比如 時間復雜度 O(n) 的命令 操作大 Key :LRANGE,SORT,HGETALL 等
- 復雜 Lua 腳本
使用場景
- 緩存系統
- 實時分析和統計
- 會話存儲
- 排行榜
2. Memcached
圖片
Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
免費開源、高性能、分布式內存對象緩存系統,本質上是通用的,但旨在通過減輕數據庫負載來加速動態 Web 應用程序。
2003 年發行,C 語言編寫。
特點
- 內存緩存系統,不支持持久化
- 分布式設計,支持集群
優點
- 極簡設計,極高的性能
- 易于部署和使用,擴展性好,可以輕松橫向擴展
缺點
- 只支持字符串類型的key-value存儲
- 不支持持久化,數據在重啟后會丟失
- 功能較少,不支持復雜操作
使用場景
- Web應用的緩存
- 數據庫查詢結果緩存
- 會話存儲
3. etcd
圖片
Distributed reliable key-value store for the most critical data of a distributed system
可靠的分布式鍵值存儲,用于存儲分布式系統中最關鍵的數據
2013 年發行,GO 語言編寫。
特點
- 分布式鍵值存儲
- 使用 Raft 算法保證強一致性
- 支持復雜的數據查詢
- 接口簡單,可以用 HTTP 操作
優點
- 強一致性和高可用性
- 易于與Kubernetes等容器編排工具集成
- 適用于分布式系統的配置管理和服務發現
缺點
- 寫入性能相對較低(Benchmarked at 1000s of writes/s per instance)
- 數據存儲限制:一般建議每個鍵值對的大小保持在較小的范圍內(通常小于 1 MB),并且總的數據量不應超過幾個 GB。
使用場景
- 分布式系統的配置管理
- 服務注冊與發現
- 分布式鎖
- leader 選舉
4. Hazelcast
圖片
Hazelcast is a unified real-time data platform combining stream processing with a fast data store, allowing customers to act instantly on data-in-motion for real-time insights.
Hazelcast是一個統一的實時數據平臺,將流處理與快速數據存儲相結合,允許客戶立即對動態數據采取行動,以獲得實時見解。
Hazelcast 最初發布于 2008 年,用 Java 編寫。
使用場景
- 對流數據或靜態數據進行狀態數據處理
- 直接使用SQL查詢流式和批量數據源
- 通過連接器庫提取數據并使用低延遲 SQL 查詢提供數據
- 根據事件推送更新到應用程序
- 基于低延遲隊列或發布-訂閱消息傳遞
- 通過讀/寫和后寫等緩存模式快速訪問上下文和事務數據
- 微服務的分布式協調
- 將數據從一個區域復制到另一個區域或同一區域的數據中心之間
看了官網和 Github 的介紹后,可以發現它不僅提供分布式數據存儲,更是一個分布式數據平臺,支持更廣泛的用例,包括緩存、數據處理、事件流處理和并發計算等。
它支持的 分布式數據結構 非常豐富,第一個就是 Map,還有 AP,CP 之分。
圖片
文檔:https://docs.hazelcast.com/hazelcast/latest/data-structures/distributed-data-structures
5. Ehcache
圖片
Ehcache is an open source, standards-based cache that boosts performance, offloads your database, and simplifies scalability. It's the most widely-used Java-based cache because it's robust, proven, full-featured, and integrates with other popular libraries and frameworks. Ehcache scales from in-process caching, all the way to mixed in-process/out-of-process deployments with terabyte-sized caches.
Ehcache是一個開源的,基于標準的緩存,可以提高性能,卸載數據庫,簡化可伸縮性。
它是使用最廣泛的基于java的緩存,因為它是健壯的、經過驗證的、功能齊全的,并且可以與其他流行的庫和框架集成。
Ehcache可以從進程內緩存擴展到使用 tb級緩存的進程內/進程外混合部署。
2009年發行,Java 語言編寫。
特點
- Java內存緩存庫
- 支持本地和分布式緩存
- 支持多級緩存(內存和磁盤)
- 可與Spring等框架集成
優點
- 易于集成到Java應用中
- 支持持久化和多級緩存
- 配置靈活,適應多種使用場景
缺點
- 主要針對Java生態系統,其他語言支持較弱
- 分布式功能相對較弱
使用場景
- Web應用的頁面緩存
- 數據庫結果緩存
總結
- Redis 適用于需要豐富數據結構、高性能讀寫、發布/訂閱功能的場景,適合實時數據處理和復雜緩存需求。
- Memcached 適用于簡單、高速緩存需求的場景,適合簡單的鍵值對存儲,不適合需要持久化或復雜數據結構的場景。
- etcd 適用于分布式系統的協調、配置管理和服務發現,適合需要強一致性的小數據量存儲。
- Hazelcast 適用于需要分布式緩存和計算的場景,適合需要在內存中處理大規模數據并進行復雜計算的應用。
- Ehcache 適用于 Java 應用的本地和分布式緩存需求,適合需要與 Java 框架深度集成的場景。