超越 Redis 性能 KeyDB 的核心技术架构

数据库
今天,要向您介绍的正是这样一款革命性的产品——KeyDB,一个在性能上超越Redis的新型数据库。

在当今快速发展的数字世界中,数据的快速存取和管理是构建高效应用程序的关键。Redis,作为一款广泛使用的高性能键值存储系统,已经成为了行业的标杆。但是,技术的突破从未停歇,总有新的力量在暗流涌动,准备颠覆现状。今天,要向您介绍的正是这样一款革命性的产品——KeyDB,一个在性能上超越Redis的新型数据库。

一、核心技术架构概述

KeyDB 是 Redis 的一个高性能分支,专注于多线程、内存效率和高吞吐量。KeyDB 保持与 Redis 协议、模块和脚本的完全兼容性,同时提供了一些 Redis 不具备的新特性和性能优势。接下来,我将详细介绍 KeyDB 的核心技术架构。

图片

二、多线程技术架构

KeyDB 的多线程架构是其最大的特点之一。与 Redis 的单线程设计不同,KeyDB 拆分了主线程为多个工作线程(Worker Threads),每个工作线程都是 I/O 线程,负责监听端口、Accept 请求、读取数据和解析协议。这样的设计使得 KeyDB 能够并行处理多个请求,显著提升处理能力,特别是在处理大量并发请求时表现尤为突出。

图片

三、Active-Replica 复制机制

KeyDB 支持多个保持同步的主节点(Active-Replica),这些主节点都可以接受读写请求,不需要哨兵节点进行监控。这种多活(Multi-Active)的复制架构使得 KeyDB 在原有 Redis 高可用架构的基础上增加了新的思路,提高了系统的弹性和可用性。

四、内存管理与数据结构

KeyDB 使用了更为高效的内存管理策略,例如采用 jemalloc 作为默认的内存分配器,相较于 Redis 使用的 libc 内存分配器,jemalloc 具有更好的内存利用效率。此外,KeyDB 还提供了多种数据持久化选项,包括 RDB 快照和 AOF 日志,以应对不同的业务需求和恢复策略。

图片

五、安全性

KeyDB 提供了 TLS 加密支持,其 TLS 性能是 Redis + TLS 的 7 倍,这大大增强了数据传输的安全性。KeyDB 的多线程设计还能支持更多的工作线程来防止因 TLS 加密增加的 CPU 开销导致的性能下降。

图片

六、扩展性与兼容性

KeyDB 支持垂直和水平的扩展,能够最大化资源利用率。对于已达到设备上限的 Redis 实例,KeyDB 是一个很好的替代选择。KeyDB 与 Redis 完全兼容,开发者可以无缝地将现有 Redis 应用迁移至 KeyDB,同时 KeyDB 还提供了一些新的命令和特性。

七、更方便的管理生存时间

KeyDB 提供了一种更为便捷的方式来管理键的生存时间。通过使用 EXPIRE 命令,您可以精确地设置集合中成员的过期时间。这一特性还包括了近乎实时的主动删除功能,这意味着一旦设置了过期时间,KeyDB 会在成员过期后立即将其从内存中移除,从而提高了资源管理的效率。这种改进使得 KeyDB 成为了需要精细控制数据生命周期的应用的理想选择。

八、性能优势

图片

从图表可以看出,KeyDB 在所有情况下都表现出更高的性能,即使启用了 TLS 也是如此。启用 TLS 会降低性能,但 KeyDB 的性能仍然优于 Redis。此外,启用 Redis 的 io-threads 参数并没有显著提升其性能,甚至在某些情况下还降低了性能。

九、安装与配置

安装 KeyDB 相对直观,可以通过编译源代码或在 Docker 上运行预构建的镜像来完成。若要在 Docker 上运行 KeyDB,可以执行以下命令:

docker pull eqalpha/keydb
docker run -p 6379:6379 -d eqalpha/keydb

对于更复杂的部署,可以使用 install_server.sh 脚本,但这适用于 Linux 系统。此外,KeyDB 提供了详细的配置文件 keydb.conf,可以通过命令行参数直接传入配置选项。

十、使用 KeyDB

由于 KeyDB 与 Redis 完全兼容,因此可以像使用 Redis 那样使用 KeyDB。例如,使用 lettuce.core.RedisClient 库连接到 KeyDB,并进行基本的键值操作:

import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;

public class KeyDBDemo {

    public static void main(String[] args) {
        // Create a Redis client that connects to the local KeyDB instance
        RedisClient redisClient = RedisClient.create(RedisURI.create("localhost"));
        StatefulRedisConnection<String, String> connection = redisClient.connect();

        // Get the Redis commands
        RedisCommands<String, String> syncCommands = connection.sync();
        syncCommands.set("name", "Bing");

        // Retrieve the string value associated with the key "name"
        String name = syncCommands.get("name");

        // Print the result
        System.out.println("The name is " + name);

        connection.close();
        redisClient.shutdown();
    }
}

总结:

KeyDB 以其多线程架构、Active-Replica 复制机制、高效的内存管理、数据结构设计、安全性、扩展性与兼容性,成为了 Redis 的一个重要补充和发展。KeyDB 为需要高性能、低延迟数据库的场景提供了更多的可能性,尤其是在需要处理大量并发请求的网络应用中展现出巨大的潜力。有新项目研发的小伙伴们抓紧尝鲜,体验下效果。

仓库地址:https://github.com/EQ-Alpha/KeyDB

项目地址:https://docs.keydb.dev/

责任编辑:庞桂玉 来源: 顶层架构领域
相关推荐

2009-06-26 16:01:39

EJB组织开发EJB容器EJB

2022-05-07 14:31:46

物联网

2021-06-02 07:15:57

Locust测试工具

2021-07-28 07:53:20

C#.NET设计

2020-01-15 10:29:29

区块链架构模型

2017-05-08 13:37:32

IaaS核心虚拟化

2017-03-08 10:06:11

Java技术点注解

2016-11-15 14:33:05

Flink大数据

2023-06-14 08:49:22

PodKubernetes

2011-06-15 14:45:26

上网行为管理技术

2015-01-12 09:48:15

云计算分布式虚拟化

2020-04-06 20:11:26

区块链分布式核心技术

2022-05-09 08:21:29

Spring微服务Sentinel

2009-06-15 17:54:50

Java核心技术

2017-03-24 17:17:35

限流节流系统

2017-04-26 23:10:03

数据组织数据库

2018-03-02 09:04:08

虚拟化存储云存储

2016-11-22 17:05:54

Apache Flin大数据Flink

2011-11-23 15:53:54

Java核心技术框架

2016-12-12 09:01:47

Amazon Go核心技术
点赞
收藏

51CTO技术栈公众号