1. 首页 > 软件安装教程 > 正文

KeyDB安装配置-KeyDB数据库安装配置_升级迁移详细过程

1. KeyDB概述与环境规划

KeyDB是Redis的高性能分支,由Snap公司开发并开源。KeyDB完全兼容Redis协议,采用多线程架构,相比单线程的Redis具有更高的吞吐量和更低的延迟。KeyDB特别适合高并发场景,是Redis的理想替代方案。更多学习教程www.fgedu.net.cn

1.1 KeyDB版本说明

KeyDB目前主要版本为KeyDB 6.3,本教程以KeyDB 6.3为例进行详细讲解。

# 查看KeyDB版本
$ keydb-cli –version
keydb-cli 6.3.4 (00000000/0) 64 bit

# 查看服务器信息
$ keydb-cli INFO server
# Server
redis_version:6.3.4
server_name:keydb
server_version:6.3.4

1.2 环境规划

本次安装环境规划如下:

主机名:fgedudb01.fgedu.net.cn
IP地址:192.168.1.51
数据库端口:6379
管理端口:16379
数据库目录:/data/keydb
日志目录:/var/log/keydb
备份目录:/backup/keydb

内存规划:
最大内存:16GB
最大客户端连接:10000

1.3 KeyDB核心特性

主要特点:
1. 多线程架构:充分利用多核CPU
2. Redis兼容:完全兼容Redis协议和API
3. 高性能:吞吐量比Redis提升数倍
4. Active-Replication:支持主动复制
5. Flash存储:支持将部分数据存储到SSD
6. 子键过期:支持对Hash等类型的子键设置过期
7. 模块支持:支持Redis模块
8. 集群支持:支持Redis Cluster模式

2. 硬件环境要求与检查

在安装KeyDB之前,需要对服务器硬件环境进行全面检查。学习交流加群风哥微信: itpux-com

2.1 最低硬件要求

最低配置:
CPU:2核心
内存:2GB
磁盘:10GB

推荐配置(生产环境):
CPU:8核心以上
内存:32GB以上
磁盘:100GB以上SSD

高并发环境配置:
CPU:16核心以上
内存:64GB以上
磁盘:500GB以上NVMe SSD

2.2 系统环境检查

# 检查操作系统版本
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.8 (Ootpa)

# 检查内核版本
# uname -a
Linux fgedudb01 4.18.0-477.10.1.el8_8.x86_64 #1 SMP Fri Apr 4 10:00:00 CST 2026 x86_64 x86_64 x86_64 GNU/Linux

# 检查内存信息
# free -h
total used free shared buff/cache available
Mem: 31Gi 1.0Gi 29Gi 256Mi 1.0Gi 30Gi
Swap: 7Gi 0B 7Gi

# 检查磁盘空间
# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg_system-lv_root 50G 2.5G 48G 5% /
/dev/sda2 1014M 150M 865M 15% /boot
/dev/mapper/vg_data-lv_data 100G 10G 90G 10% /data
/dev/mapper/vg_backup-lv_backup 50G 5G 45G 10% /backup

# 检查所需软件包
# rpm -qa | grep -E “gcc|make|tcl”
gcc-8.5.0-18.el8.x86_64
make-4.2.1-11.el8.x86_64
tcl-8.6.8-4.el8.x86_64

# 安装依赖包
# dnf install -y gcc make tcl wget

2.3 内核参数配置

# 配置内核参数
# vi /etc/sysctl.d/99-keydb.conf

# 添加以下参数
# 网络参数
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_tw_reuse = 1

# 内存参数
vm.overcommit_memory = 1
vm.swappiness = 1

# 使内核参数生效
# sysctl -p /etc/sysctl.d/99-keydb.conf

# 输出示例:
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535

vm.overcommit_memory = 1
vm.swappiness = 1

2.4 用户资源限制配置

# 配置用户限制
# vi /etc/security/limits.conf

# 添加以下配置
keydb soft nofile 65535
keydb hard nofile 65535
keydb soft nproc 65535
keydb hard nproc 65535
keydb soft memlock unlimited
keydb hard memlock unlimited

# 配置systemd限制
# mkdir -p /etc/systemd/system/keydb.service.d
# vi /etc/systemd/system/keydb.service.d/limits.conf

[Service]
LimitNOFILE=65535
LimitNPROC=65535

# 禁用透明大页
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 永久禁用
# vi /etc/rc.d/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# chmod +x /etc/rc.d/rc.local

生产环境建议:KeyDB对内存和网络要求较高,建议配置足够的内存和高速网络。vm.overcommit_memory设置为1可以避免内存分配失败。

3. KeyDB数据库安装步骤

本节详细介绍KeyDB 6.3的安装过程。学习交流加群风哥QQ113257174

3.1 创建用户和目录

# 创建keydb用户
# useradd -r -s /sbin/nologin keydb

# 创建目录结构
# mkdir -p /data/keydb
# mkdir -p /var/log/keydb
# mkdir -p /backup/keydb

# 设置目录权限
# chown -R keydb:keydb /data/keydb
# chown -R keydb:keydb /var/log/keydb
# chown -R keydb:keydb /backup/keydb
# chmod -R 750 /data/keydb
# chmod -R 750 /var/log/keydb
# chmod -R 750 /backup/keydb

# 验证目录权限
# ls -la /data/
总用量 0
drwxr-xr-x. 2 keydb keydb 6 4月 4 10:00 keydb

3.2 下载并编译KeyDB

# 下载KeyDB源码
# cd /usr/local/src
# wget https://github.com/Snapchat/KeyDB/archive/refs/tags/v6.3.4.tar.gz

# 输出示例:
–2026-04-04 10:00:00– https://github.com/Snapchat/KeyDB/archive/refs/tags/v6.3.4.tar.gz
正在解析主机 github.com… 140.82.121.4
正在连接 github.com|140.82.121.4|:443… 已连接。
已发出 HTTP 请求,正在等待回应… 200 OK
长度:2500000 (2.4M) [application/octet-stream]
正在保存至: “v6.3.4.tar.gz”
100%[======================================>] 2,500,000 1.0MB/s 用时 2.4s
2026-04-04 10:00:05 (1.0 MB/s) – 已保存 “v6.3.4.tar.gz”

# 解压源码
# tar -xzf v6.3.4.tar.gz
# cd KeyDB-6.3.4

# 编译KeyDB
# make -j$(nproc)

# 输出示例:
cd src && make all
make[1]: 进入目录”/usr/local/src/KeyDB-6.3.4/src”
CC Makefile.dep

LINK keydb-server
INSTALL keydb-sentinel
CC keydb-cli.o
LINK keydb-cli
CC keydb-benchmark.o
LINK keydb-benchmark
INSTALL keydb-check-rdb
INSTALL keydb-check-aof

Hint: It’s a good idea to run ‘make test’ 😉

make[1]: 离开目录”/usr/local/src/KeyDB-6.3.4/src”

# 运行测试
# make test

# 输出示例:
All tests passed without errors!

# 安装KeyDB
# make install PREFIX=/usr/local/keydb

# 输出示例:
cd src && make install
make[1]: 进入目录”/usr/local/src/KeyDB-6.3.4/src”
INSTALL keydb-server
INSTALL keydb-benchmark
INSTALL keydb-cli
make[1]: 离开目录”/usr/local/src/KeyDB-6.3.4/src”

# 验证安装
# ls -la /usr/local/keydb/bin/
总用量 20736
-rwxr-xr-x. 1 root root 630784 4月 4 10:00 keydb-benchmark
-rwxr-xr-x. 1 root root 954368 4月 4 10:00 keydb-check-aof
-rwxr-xr-x. 1 root root 954368 4月 4 10:00 keydb-check-rdb
-rwxr-xr-x. 1 root root 954368 4月 4 10:00 keydb-cli
-rwxr-xr-x. 1 root root 954368 4月 4 10:00 keydb-sentinel
-rwxr-xr-x. 1 root root 18624512 4月 4 10:00 keydb-server

3.3 配置环境变量

# 编辑环境变量文件
# vi /etc/profile.d/keydb.sh

# 添加以下内容
export KEYDB_HOME=/usr/local/keydb
export PATH=$KEYDB_HOME/bin:$PATH

# 使环境变量生效
# source /etc/profile.d/keydb.sh

# 验证环境变量
# keydb-server –version
KeyDB server v=6.3.4 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64

# keydb-cli –version
keydb-cli 6.3.4 (00000000/0) 64 bit

3.4 创建配置文件

# 创建配置文件
# vi /etc/keydb.conf

# 添加以下配置
# 网络配置
bind 192.168.1.51 127.0.0.1
port 6379
protected-mode yes
tcp-backlog 511
timeout 0
tcp-keepalive 300

# 通用配置
daemonize yes
supervised systemd
pidfile /var/run/keydb/keydb.pid
loglevel notice
logfile /var/log/keydb/keydb.log
databases 16

# 快照配置
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/keydb

# 复制配置
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
replica-priority 100

# 安全配置
# requirepass fgedupass

# 内存配置
maxmemory 16gb
maxmemory-policy allkeys-lru

# 惰性删除
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

# 持久化配置
appendonly no
appendfilename “appendonly.aof”
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 多线程配置(KeyDB特有)
server-threads 4
server-thread-affinity true

# 创建PID目录
# mkdir -p /var/run/keydb
# chown keydb:keydb /var/run/keydb

3.5 创建Systemd服务

# 创建服务文件
# vi /etc/systemd/system/keydb.service

[Unit]
Description=KeyDB In-Memory Data Store
After=network.target

[Service]
Type=notify
User=keydb
Group=keydb
ExecStart=/usr/local/keydb/bin/keydb-server /etc/keydb.conf –supervised systemd
ExecStop=/usr/local/keydb/bin/keydb-cli shutdown
Restart=always
RestartSec=5
LimitNOFILE=65535
LimitNPROC=65535

[Install]
WantedBy=multi-user.target

# 重载systemd
# systemctl daemon-reload

# 启动KeyDB服务
# systemctl start keydb

# 设置开机自启动
# systemctl enable keydb

# 输出示例:
Created symlink /etc/systemd/system/multi-user.target.wants/keydb.service → /etc/systemd/system/keydb.service.

# 检查服务状态
# systemctl status keydb

● keydb.service – KeyDB In-Memory Data Store
Loaded: loaded (/etc/systemd/system/keydb.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2026-04-04 10:00:00 CST; 5s ago
Main PID: 12345 (keydb-server)
Tasks: 9 (limit: 4915)
Memory: 10.0M
CGroup: /system.slice/keydb.service
└─12345 /usr/local/keydb/bin/keydb-server /etc/keydb.conf –supervised systemd

# 检查端口
# netstat -tlnp | grep keydb
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 12345/keydb-server
tcp 0 0 192.168.1.51:6379 0.0.0.0:* LISTEN 12345/keydb-server

风哥提示:KeyDB的多线程配置是其核心优势,server-threads参数建议设置为CPU核心数的一半。KeyDB完全兼容Redis,可以使用redis-cli连接。

4. 数据库参数配置

数据库参数配置是KeyDB安装的关键步骤,直接影响数据库性能和稳定性。更多学习教程公众号风哥教程itpux_com

4.1 内存管理配置

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379

192.168.1.51:6379> CONFIG GET maxmemory
1) “maxmemory”
2) “17179869184”

192.168.1.51:6379> CONFIG GET maxmemory-policy
1) “maxmemory-policy”
2) “allkeys-lru”

# 设置最大内存
192.168.1.51:6379> CONFIG SET maxmemory 32gb
OK

# 设置内存淘汰策略
192.168.1.51:6379> CONFIG SET maxmemory-policy allkeys-lru
OK

# 内存淘汰策略说明:
# volatile-lru: 从设置了过期时间的数据集中淘汰最近最少使用的key
# allkeys-lru: 从所有数据集中淘汰最近最少使用的key
# volatile-lfu: 从设置了过期时间的数据集中淘汰最不常用的key
# allkeys-lfu: 从所有数据集中淘汰最不常用的key
# volatile-random: 从设置了过期时间的数据集中随机淘汰key
# allkeys-random: 从所有数据集中随机淘汰key
# volatile-ttl: 从设置了过期时间的数据集中淘汰即将过期的key
# noeviction: 不淘汰任何key,内存满时返回错误

# 查看内存使用情况
192.168.1.51:6379> INFO memory
# Memory
used_memory:1024000
used_memory_human:1000.00K
used_memory_rss:2048000
used_memory_rss_human:2.00M
used_memory_peak:1024000
used_memory_peak_human:1000.00K
total_system_memory:34359738368
total_system_memory_human:32.00G
maxmemory:34359738368
maxmemory_human:32.00G
maxmemory_policy:allkeys-lru

192.168.1.51:6379> EXIT

4.2 持久化配置

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379

# 启用AOF持久化
192.168.1.51:6379> CONFIG SET appendonly yes
OK

# 设置AOF同步策略
192.168.1.51:6379> CONFIG SET appendfsync everysec
OK

# AOF同步策略说明:
# always: 每个写命令都同步到磁盘,最安全但最慢
# everysec: 每秒同步一次,平衡性能和安全
# no: 由操作系统决定何时同步,最快但最不安全

# 查看持久化配置
192.168.1.51:6379> CONFIG GET appendonly
1) “appendonly”
2) “yes”

192.168.1.51:6379> CONFIG GET appendfsync
1) “appendfsync”
2) “everysec”

# 手动触发RDB快照
192.168.1.51:6379> BGSAVE
Background saving started

# 查看RDB状态
192.168.1.51:6379> LASTSAVE
(integer) 1712205600

# 手动触发AOF重写
192.168.1.51:6379> BGREWRITEAOF
Background append only file rewriting started

192.168.1.51:6379> EXIT

4.3 多线程配置

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379

# 查看线程配置
192.168.1.51:6379> CONFIG GET server-threads
1) “server-threads”
2) “4”

192.168.1.51:6379> CONFIG GET server-thread-affinity
1) “server-thread-affinity”
2) “yes”

# 设置线程数(需要重启)
# vi /etc/keydb.conf
server-threads 8
server-thread-affinity true

# 线程配置说明:
# server-threads: 工作线程数,建议设置为CPU核心数的一半
# server-thread-affinity: 是否绑定CPU核心,建议开启

# 查看服务器信息
192.168.1.51:6379> INFO server
# Server
redis_version:6.3.4
server_name:keydb
server_version:6.3.4
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:abc123
redis_mode:standalone
os:Linux 4.18.0-477.el8.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:8.5.0
process_id:12345
process_supervised:systemd
run_id:abc123def456
tcp_port:6379
server_time_usec:1712205600000000
uptime_in_seconds:3600
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:12345678
executable:/usr/local/keydb/bin/keydb-server
config_file:/etc/keydb.conf
server-threads:4

192.168.1.51:6379> EXIT

生产环境建议:建议启用AOF持久化,设置appendfsync为everysec。多线程配置建议设置为CPU核心数的一半,并开启CPU亲和性。

5. 数据类型与操作

KeyDB支持多种数据类型,包括字符串、哈希、列表、集合、有序集合等。from:www.itpux.com

5.1 字符串操作

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379

# 设置字符串
192.168.1.51:6379> SET fgedu:name “风哥教程”
OK

# 获取字符串
192.168.1.51:6379> GET fgedu:name
“风哥教程”

# 设置带过期时间的字符串
192.168.1.51:6379> SET fgedu:session “abc123” EX 3600
OK

# 查看过期时间
192.168.1.51:6379> TTL fgedu:session
(integer) 3599

# 批量设置
192.168.1.51:6379> MSET fgedu:key1 “value1” fgedu:key2 “value2”
OK

# 批量获取
192.168.1.51:6379> MGET fgedu:key1 fgedu:key2
1) “value1”
2) “value2″

# 自增操作
192.168.1.51:6379> SET fgedu:counter 100
OK
192.168.1.51:6379> INCR fgedu:counter
(integer) 101
192.168.1.51:6379> INCRBY fgedu:counter 10
(integer) 111

# 追加字符串
192.168.1.51:6379> APPEND fgedu:name ” – itpux_com”
(integer) 15
192.168.1.51:6379> GET fgedu:name
“风哥教程 – itpux_com”

192.168.1.51:6379> EXIT

5.2 哈希操作

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379

# 设置哈希字段
192.168.1.51:6379> HSET fgedu:user:1 name “张三” age 30 email “zhangsan@fgedu.net.cn”
(integer) 3

# 获取单个字段
192.168.1.51:6379> HGET fgedu:user:1 name
“张三”

# 获取所有字段
192.168.1.51:6379> HGETALL fgedu:user:1
1) “name”
2) “张三”
3) “age”
4) “30”
5) “email”
6) “zhangsan@fgedu.net.cn”

# 获取多个字段
192.168.1.51:6379> HMGET fgedu:user:1 name age
1) “张三”
2) “30”

# 判断字段是否存在
192.168.1.51:6379> HEXISTS fgedu:user:1 name
(integer) 1

# 删除字段
192.168.1.51:6379> HDEL fgedu:user:1 age
(integer) 1

# 字段自增
192.168.1.51:6379> HSET fgedu:user:1 age 30
(integer) 1
192.168.1.51:6379> HINCRBY fgedu:user:1 age 1
(integer) 31

# KeyDB特有:设置子键过期时间
192.168.1.51:6379> HSETEX fgedu:user:1 temp_field 3600 “temp_value”
OK

192.168.1.51:6379> EXIT

5.3 列表操作

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379

# 左侧插入
192.168.1.51:6379> LPUSH fgedu:list “item1” “item2” “item3”
(integer) 3

# 右侧插入
192.168.1.51:6379> RPUSH fgedu:list “item4”
(integer) 4

# 获取列表长度
192.168.1.51:6379> LLEN fgedu:list
(integer) 4

# 获取列表元素
192.168.1.51:6379> LRANGE fgedu:list 0 -1
1) “item3”
2) “item2”
3) “item1”
4) “item4”

# 左侧弹出
192.168.1.51:6379> LPOP fgedu:list
“item3”

# 右侧弹出
192.168.1.51:6379> RPOP fgedu:list
“item4”

# 获取指定索引元素
192.168.1.51:6379> LINDEX fgedu:list 0
“item2”

# 阻塞弹出
192.168.1.51:6379> BLPOP fgedu:list 5
1) “fgedu:list”
2) “item2”

192.168.1.51:6379> EXIT

5.4 集合操作

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379

# 添加集合元素
192.168.1.51:6379> SADD fgedu:set “member1” “member2” “member3”
(integer) 3

# 获取集合所有元素
192.168.1.51:6379> SMEMBERS fgedu:set
1) “member1”
2) “member2”
3) “member3”

# 判断元素是否存在
192.168.1.51:6379> SISMEMBER fgedu:set “member1”
(integer) 1

# 获取集合元素数量
192.168.1.51:6379> SCARD fgedu:set
(integer) 3

# 删除元素
192.168.1.51:6379> SREM fgedu:set “member3”
(integer) 1

# 集合运算
192.168.1.51:6379> SADD fgedu:set2 “member2” “member3” “member4”
(integer) 3
192.168.1.51:6379> SINTER fgedu:set fgedu:set2
1) “member2”
192.168.1.51:6379> SUNION fgedu:set fgedu:set2
1) “member1”
2) “member2”
3) “member3”
4) “member4”
192.168.1.51:6379> SDIFF fgedu:set fgedu:set2
1) “member1”

192.168.1.51:6379> EXIT

5.5 有序集合操作

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379

# 添加有序集合元素
192.168.1.51:6379> ZADD fgedu:zset 100 “member1” 200 “member2” 150 “member3”
(integer) 3

# 获取有序集合元素(按分数升序)
192.168.1.51:6379> ZRANGE fgedu:zset 0 -1 WITHSCORES
1) “member1”
2) “100”
3) “member3”
4) “150”
5) “member2”
6) “200”

# 获取有序集合元素(按分数降序)
192.168.1.51:6379> ZREVRANGE fgedu:zset 0 -1 WITHSCORES
1) “member2”
2) “200”
3) “member3”
4) “150”
5) “member1”
6) “100”

# 获取元素分数
192.168.1.51:6379> ZSCORE fgedu:zset “member1”
“100”

# 获取元素排名
192.168.1.51:6379> ZRANK fgedu:zset “member2”
(integer) 2

# 按分数范围获取
192.168.1.51:6379> ZRANGEBYSCORE fgedu:zset 100 180
1) “member1”
2) “member3”

# 增加元素分数
192.168.1.51:6379> ZINCRBY fgedu:zset 50 “member1”
“150”

192.168.1.51:6379> EXIT

风哥提示:KeyDB完全兼容Redis的数据类型和命令,可以无缝迁移现有的Redis应用。KeyDB特有的子键过期功能可以对Hash等类型的字段设置单独的过期时间。

6. 网络连接配置

网络连接配置是客户端访问数据库的关键,需要正确配置监听端口和连接方式。更多学习教程www.fgedu.net.cn

6.1 配置网络监听

# 查看当前监听端口
# netstat -tlnp | grep keydb
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 12345/keydb-server
tcp 0 0 192.168.1.51:6379 0.0.0.0:* LISTEN 12345/keydb-server

# 修改监听配置
# vi /etc/keydb.conf
bind 0.0.0.0

# 重启服务
# systemctl restart keydb

# 配置防火墙
# firewall-cmd –permanent –add-port=6379/tcp
success
# firewall-cmd –reload
success

6.2 配置认证

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379

# 设置密码
192.168.1.51:6379> CONFIG SET requirepass “fgedupass123”
OK

# 使用密码连接
$ keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123

# 或连接后认证
$ keydb-cli -h 192.168.1.51 -p 6379
192.168.1.51:6379> AUTH fgedupass123
OK

# 永久设置密码
# vi /etc/keydb.conf
requirepass fgedupass123

# 重启服务
# systemctl restart keydb

6.3 配置主从复制

# 在从节点配置
# vi /etc/keydb.conf
replicaof 192.168.1.51 6379
masterauth fgedupass123

# 重启从节点服务
# systemctl restart keydb

# 在主节点查看复制状态
$ keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123

192.168.1.51:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.52,port=6379,state=online,offset=1234,lag=0
master_replid:abc123def456
master_repl_offset:1234

# 在从节点查看复制状态
192.168.1.52:6379> INFO replication
# Replication
role:slave
master_host:192.168.1.51
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:1234

生产环境建议:建议配置密码认证,使用强密码。主从复制建议配置在专用网络,避免跨公网复制。

7. 备份恢复配置

备份恢复是数据库管理的重要环节,KeyDB提供了RDB和AOF两种持久化方式。学习交流加群风哥微信: itpux-com

7.1 RDB备份

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123

# 手动触发RDB快照
192.168.1.51:6379> BGSAVE
Background saving started

# 查看RDB状态
192.168.1.51:6379> LASTSAVE
(integer) 1712205600

# 查看RDB文件
# ls -la /data/keydb/
总用量 1024
-rw-r–r–. 1 keydb keydb 512 4月 4 10:00 dump.rdb

# 复制RDB文件到备份目录
# cp /data/keydb/dump.rdb /backup/keydb/dump_$(date +%Y%m%d).rdb

# 验证备份文件
# ls -la /backup/keydb/
总用量 512
-rw-r–r–. 1 root root 512 4月 4 10:00 dump_20260404.rdb

7.2 AOF备份

# 启用AOF持久化
$ keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123

192.168.1.51:6379> CONFIG SET appendonly yes
OK
192.168.1.51:6379> CONFIG SET appendfilename “appendonly.aof”
OK

# 查看AOF文件
# ls -la /data/keydb/
总用量 2048
-rw-r–r–. 1 keydb keydb 512 4月 4 10:00 appendonly.aof
-rw-r–r–. 1 keydb keydb 512 4月 4 10:00 dump.rdb

# 复制AOF文件到备份目录
# cp /data/keydb/appendonly.aof /backup/keydb/appendonly_$(date +%Y%m%d).aof

# 验证备份文件
# ls -la /backup/keydb/
总用量 1024
-rw-r–r–. 1 root root 512 4月 4 10:00 appendonly_20260404.aof
-rw-r–r–. 1 root root 512 4月 4 10:00 dump_20260404.rdb

7.3 数据恢复

# 停止KeyDB服务
# systemctl stop keydb

# 恢复RDB文件
# cp /backup/keydb/dump_20260404.rdb /data/keydb/dump.rdb
# chown keydb:keydb /data/keydb/dump.rdb

# 恢复AOF文件
# cp /backup/keydb/appendonly_20260404.aof /data/keydb/appendonly.aof
# chown keydb:keydb /data/keydb/appendonly.aof

# 启动KeyDB服务
# systemctl start keydb

# 验证数据
$ keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123

192.168.1.51:6379> GET fgedu:name
“风哥教程 – itpux_com”

192.168.1.51:6379> EXIT

7.4 自动备份脚本

# 创建备份脚本
# vi /usr/local/bin/keydb_backup.sh

#!/bin/bash
BACKUP_DIR=/backup/keydb
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=/var/log/keydb/backup.log

echo “=== Backup started at $(date) ===” >> $LOG_FILE

# 触发RDB快照
keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123 BGSAVE >> $LOG_FILE 2>&1

# 等待快照完成
sleep 5

# 复制备份文件
cp /data/keydb/dump.rdb ${BACKUP_DIR}/dump_${DATE}.rdb >> $LOG_FILE 2>&1

if [ $? -eq 0 ]; then
echo “Backup completed successfully” >> $LOG_FILE
else
echo “Backup failed” >> $LOG_FILE
fi

# 清理30天前的备份
find ${BACKUP_DIR} -name “dump_*.rdb” -mtime +30 -delete >> $LOG_FILE 2>&1

echo “=== Backup finished at $(date) ===” >> $LOG_FILE
echo “” >> $LOG_FILE

# 设置脚本权限
# chmod +x /usr/local/bin/keydb_backup.sh

# 配置定时任务
# crontab -e

# 添加以下内容(每天凌晨2点执行备份)
0 2 * * * /usr/local/bin/keydb_backup.sh

风哥提示:生产环境建议同时启用RDB和AOF持久化,RDB用于快速恢复,AOF用于数据安全。备份文件建议存储在独立的存储设备或远程服务器上。

8. 升级与迁移

数据库升级和迁移是运维工作中的重要环节,需要仔细规划和执行。更多学习教程公众号风哥教程itpux_com

8.1 版本升级

# 检查当前版本
$ keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123 INFO server | grep redis_version
redis_version:6.3.4

# 执行完整备份
# keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123 BGSAVE

# 停止服务
# systemctl stop keydb

# 备份配置文件
# cp /etc/keydb.conf /etc/keydb.conf.bak

# 下载新版本
# cd /usr/local/src
# wget https://github.com/Snapchat/KeyDB/archive/refs/tags/v6.3.5.tar.gz

# 编译安装
# tar -xzf v6.3.5.tar.gz
# cd KeyDB-6.3.5
# make -j$(nproc)
# make install PREFIX=/usr/local/keydb

# 启动服务
# systemctl start keydb

# 验证版本
$ keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123 INFO server | grep redis_version
redis_version:6.3.5

8.2 从Redis迁移

# 方法1:使用RDB文件迁移
# 在Redis上执行
$ redis-cli -h redis_host -p 6379 BGSAVE

# 复制RDB文件到KeyDB服务器
$ scp /var/lib/redis/dump.rdb keydb_host:/data/keydb/dump.rdb

# 在KeyDB服务器上
# chown keydb:keydb /data/keydb/dump.rdb
# systemctl restart keydb

# 方法2:使用主从复制迁移
# 在KeyDB上配置
# vi /etc/keydb.conf
replicaof redis_host 6379

# 重启KeyDB
# systemctl restart keydb

# 等待数据同步完成
$ keydb-cli INFO replication

# 同步完成后断开复制
$ keydb-cli REPLICAOF NO ONE

# 方法3:使用keydb-cli –rdb迁移
$ keydb-cli –rdb /tmp/dump.rdb -h redis_host -p 6379
$ keydb-cli -h keydb_host -p 6379 –pipe < /tmp/dump.rdb

生产环境建议:升级前必须执行完整备份,并在测试环境验证升级过程。从Redis迁移时建议使用主从复制方式,可以实现无缝迁移。

9. 生产环境实战案例

本节提供一个完整的生产环境配置案例,帮助读者更好地理解KeyDB的实际应用。from:www.itpux.com

9.1 高可用集群配置

# 创建Sentinel配置文件
# vi /etc/keydb-sentinel.conf

port 26379
sentinel monitor fgedumaster 192.168.1.51 6379 2
sentinel auth-pass fgedumaster fgedupass123
sentinel down-after-milliseconds fgedumaster 30000
sentinel parallel-syncs fgedumaster 1
sentinel failover-timeout fgedumaster 180000
logfile /var/log/keydb/sentinel.log
dir /data/keydb

# 创建Sentinel服务文件
# vi /etc/systemd/system/keydb-sentinel.service

[Unit]
Description=KeyDB Sentinel
After=network.target

[Service]
Type=notify
User=keydb
Group=keydb
ExecStart=/usr/local/keydb/bin/keydb-server /etc/keydb-sentinel.conf –sentinel
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

# 启动Sentinel
# systemctl daemon-reload
# systemctl start keydb-sentinel
# systemctl enable keydb-sentinel

# 查看Sentinel状态
$ keydb-cli -p 26379 INFO sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=fgedumaster,status=ok,address=192.168.1.51:6379,slaves=1,sentinels=3

9.2 性能监控

# 连接KeyDB
$ keydb-cli -h 192.168.1.51 -p 6379 -a fgedupass123

# 查看统计信息
192.168.1.51:6379> INFO stats
# Stats
total_connections_received:100
total_commands_processed:10000
instantaneous_ops_per_sec:100
total_net_input_bytes:1000000
total_net_output_bytes:10000000
instantaneous_input_kbps:100.00
instantaneous_output_kbps:1000.00
rejected_connections:0
sync_full:1
sync_partial_ok:0
sync_partial_err:0
expired_keys:10
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:5000
keyspace_misses:100
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:100
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0

# 查看客户端连接
192.168.1.51:6379> CLIENT LIST
id=1 addr=127.0.0.1:12345 fd=8 name= age=3600 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

# 查看慢查询日志
192.168.1.51:6379> SLOWLOG GET 10
1) 1) (integer) 1
2) (integer) 1712205600
3) (integer) 10000
4) 1) “KEYS”
2) “*”
5) “192.168.1.100:12345”
6) “client1”

# 查看内存使用
192.168.1.51:6379> MEMORY USAGE fgedu:name
(integer) 64

192.168.1.51:6379> EXIT

9.3 性能测试

# 使用keydb-benchmark进行性能测试
$ keydb-benchmark -h 192.168.1.51 -p 6379 -a fgedupass123 -t set,get -n 100000 -c 50

# 输出示例:
====== SET ======
100000 requests completed in 1.00 seconds
50 parallel clients
3 bytes payload
keep alive: 1
host configuration “save”: 900 1 300 10 60 10000
host configuration “appendonly”: no
multi-thread: yes
threads: 4

Latency by percentile distribution:
0.000% <= 0.031 milliseconds (cumulative count 1) 50.000% <= 0.127 milliseconds (cumulative count 50123) 75.000% <= 0.159 milliseconds (cumulative count 75234) 87.500% <= 0.191 milliseconds (cumulative count 87654) 93.750% <= 0.223 milliseconds (cumulative count 93765) 96.875% <= 0.255 milliseconds (cumulative count 96876) 98.438% <= 0.287 milliseconds (cumulative count 98432) 99.219% <= 0.319 milliseconds (cumulative count 99218) 99.609% <= 0.351 milliseconds (cumulative count 99609) 99.805% <= 0.383 milliseconds (cumulative count 99805) 99.902% <= 0.415 milliseconds (cumulative count 99902) 99.951% <= 0.447 milliseconds (cumulative count 99951) 99.976% <= 0.479 milliseconds (cumulative count 99976) 99.988% <= 0.511 milliseconds (cumulative count 99988) 99.994% <= 0.543 milliseconds (cumulative count 99994) 99.997% <= 0.575 milliseconds (cumulative count 99997) 99.998% <= 0.607 milliseconds (cumulative count 99998) 99.999% <= 0.639 milliseconds (cumulative count 99999) 100.000% <= 0.671 milliseconds (cumulative count 100000) Cumulative distribution of latencies: 0.003% <= 0.1 milliseconds (cumulative count 3) 97.997% <= 0.2 milliseconds (cumulative count 97997) 2.000% <= 0.3 milliseconds (cumulative count 99997) 0.000% <= 0.4 milliseconds (cumulative count 99997) 0.003% <= 0.5 milliseconds (cumulative count 100000) Summary: throughput summary: 100000.00 requests per second latency summary (msec): avg min p50 p95 p99 max 0.128 0.032 0.127 0.183 0.239 0.671

风哥提示:KeyDB的多线程架构在高并发场景下性能优势明显。建议在生产环境使用Sentinel实现高可用,并配置监控告警。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息