除了Redis,你还知道哪些键值数据库?

数据库 Redis
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 框架深度集成的场景。
责任编辑:武晓燕 来源: Java4ye
相关推荐

2022-07-05 08:34:22

虚拟机JavaJVM

2016-09-29 15:49:08

hadoop大数据领域

2016-01-04 11:03:53

手柄vr输入设备

2019-06-11 15:05:51

数据库数据库技巧SQL调优

2019-11-21 14:56:40

特殊文件Linux开发

2020-06-05 08:37:08

Object.entr开发Object.from

2021-09-15 09:51:36

数据库架构技术

2023-11-29 16:16:14

Redis数据库

2017-01-18 18:28:54

大数据数据库技术

2023-11-13 15:36:24

开源数据库

2023-02-26 23:33:02

SQLMySQL数据库

2019-02-28 10:37:19

开源数据库Oracle

2022-12-18 19:38:31

时序数据库数据库

2022-10-21 07:07:33

TiDBHTAP数据库

2019-01-03 14:30:04

数据库优化索引

2023-11-01 15:45:29

DBMPython

2023-10-16 23:12:02

Redis数据结构

2023-12-04 08:11:16

Oracle数据库

2019-05-07 18:17:26

Redis服务器数据

2019-10-29 08:44:47

Java数据库实体
点赞
收藏

51CTO技术栈公众号