KeyDB适配华为云&Gaussdb
什么是 KeyDB?
KeyDB 是一个高性能、多线程、兼容 Redis 的开源数据库。它是在 Redis 的基础上开发的,继承了 Redis 的易用性和强大功能,同时通过多线程架构和其他优化,提供了更高的吞吐量和更低的延迟。
官方网站: KeyDB
KeyDB 的主要特性
1. 多线程架构
KeyDB 使用多线程设计,在多核处理器上能更好地利用硬件资源。相比 Redis 的单线程模型,KeyDB 在高并发场景下具有显著的性能提升。
2. 完全兼容 Redis 协议
KeyDB 支持 Redis 客户端和所有 Redis 命令,用户可以直接将现有 Redis 项目迁移到 KeyDB,而无需修改代码。
3. 内存优化
• KeyDB 支持多主架构(Active-Active Replication),允许多个主节点共享数据,提升可用性和性能。
• 支持混合使用线程内存和共享内存,以最大化利用内存资源。
4. 多主架构 (Active-Active)
KeyDB 提供真正的多主复制,多个主节点可以同时读写,解决了 Redis 单主架构的局限性。
5. 内置 TLS 支持
KeyDB 内置支持 TLS,提升数据传输的安全性。
6. 持久化功能
和 Redis 一样,KeyDB 支持 RDB 和 AOF 的数据持久化机制,保证数据的可靠性。
7. 更多数据结构扩展
KeyDB 支持的扩展数据结构和功能(如 JSON 和多字段操作)比 Redis 更丰富。
8. 自动故障转移和高可用性
KeyDB 支持 Redis Sentinel 的功能,同时它的多主架构可以进一步提升系统的高可用性。
KeyDB 与 Redis 的性能对比
1. 多线程带来的优势
• 在单线程设计的 Redis 中,所有命令和 IO 都在一个线程中执行,这对多核 CPU 的利用效率较低。
• KeyDB 的多线程模型可以并发执行命令和处理 IO,尤其在多核服务器上性能提升显著。
2. 性能测试
官方性能测试表明:
• 在相同硬件环境下,KeyDB 的 QPS(每秒查询数)通常是 Redis 的 2 倍到 5 倍。
• 在高并发场景中,KeyDB 更能保持低延迟。
KeyDB 的安装
1. 通过 Docker 安装
docker pull eqalpha/keydb
docker run -d --name keydb -p 6379:6379 eqalpha/keydb
2. 从源码安装
# 安装依赖
sudo apt update
sudo apt install -y build-essential tcl git
# 克隆源码
git clone https://github.com/Snapchat/KeyDB.git
cd KeyDB
# 编译
make -j$(nproc)
# 运行 KeyDB
src/keydb-server
我的安装方式:推荐
wget https://download.keydb.dev/pkg/open_source/rpm/centos8/aarch64/keydb-latest-1.el8.aarch64.rpm
yum -y install ./keydb-latest-1.el8.aarch64.rpm
service keydb start
3. 通过包管理工具安装
KeyDB 提供了一些预编译的二进制包,可以直接从 KeyDB Releases 页面下载适合你的版本。
配置 KeyDB
KeyDB 的配置文件格式和 Redis 非常类似,主要配置项包括:
配置多线程
在 keydb.conf 文件中设置线程数量:
server-threads 4 # 设置为 CPU 核心数
启用多主架构
active-replica yes
multi-master yes
配置持久化
启用 RDB 和 AOF 持久化:
save 900 1
save 300 10
appendonly yes
appendfilename "appendonly.aof"
使用 KeyDB
KeyDB 的使用方法与 Redis 完全一致。以下是一些常见操作:
启动服务
keydb-server keydb.conf
客户端连接
keydb-cli
常见命令
SET key value # 设置键值对
GET key # 获取键的值
DEL key # 删除键
KEYS * # 查看所有键
适用场景
1. 高性能、高并发场景
在多线程和多主架构的支持下,KeyDB 在需要处理大量并发请求的应用中表现出色。
2. 需要高可用性和容错的场景
KeyDB 的多主架构和自动故障转移功能非常适合分布式系统和高可用环境。
3. 需要与 Redis 兼容的场景
如果项目中已经使用了 Redis,但希望获得更好的性能,可以无缝迁移到 KeyDB。
步骤1:fork 仓库
本次任务是在欧拉os上部署Keydb,测试是否正常运行。并附有demo,访问Keydb。
fork demo的仓库,demo中有基于servicecomb实现的完整的微服务脚实例,仓库信息如下:
https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiDemoJava/overview
步骤2:demo本地编译并运行
主要步骤:
- 执行mvn clean install -DskipTests
安装Keydb:
wget https://download.keydb.dev/pkg/open_source/rpm/centos8/aarch64/keydb-latest-1.el8.aarch64.rpm
yum -y install ./keydb-latest-1.el8.aarch64.rpm
service keydb start
步骤3:demo适配思路
思路比较简单:就是集成redis,因为Keydb就是redis的分支。
我的适配项目:https://gitcode.com/chenzhida/opensource-demo-keydb-241211/overview
分支:dev_czd_keydb
步骤3:适配过程的问题
问题1:因为使用的spring boot3,spring boot3在2的基础上,修改了properties的属性,正确的如下:
spring:
data:
redis:
host: ip # Redis 服务器地址
port: 6379 # Redis 端口
timeout: 5000ms # 超时时间
lettuce:
pool:
max-active: 8 # 最大连接数
max-idle: 8 # 最大空闲连接
min-idle: 0 # 最小空闲连接
max-wait: 10s # 最大等待时间
问题2:公网无法访问
解决:在keydb的配置文件中,去掉binding属性即可
步骤4:购买华为云Gaussdb和ECS,上云测试
购买华为云Gaussdb,并且购买公网IP,不然无法访问。配置如下:
产品名称 |
产品类型 |
数据库引擎版本 |
性能规格 |
实例类型 |
部署形态 |
备注 |
云数据库 GaussDB |
基础版 |
8.201 |
独享型1:4 |
集中式 |
1主2备 |
推荐 |
产品名称 | CPU架构 | 实例类型 | 公共镜像 | 镜像版本 | 备注 |
---|---|---|---|---|---|
弹性云服务器 | 鲲鹏计算 | 鲲鹏通用计算增强型 | Huawei Cloud EulerOS | Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) | 推荐 |
步骤5:部署并访问
结果如下:
- 点赞
- 收藏
- 关注作者
评论(0)