| Crates.io | rat_memcache |
| lib.rs | rat_memcache |
| version | 0.2.1 |
| created_at | 2025-09-24 09:49:38.107299+00 |
| updated_at | 2025-09-24 09:49:38.107299+00 |
| description | 高性能 Memcached 协议兼容服务器,支持双层缓存和持久化存储 |
| homepage | https://github.com/0ldm0s/rat_memcache |
| repository | https://github.com/0ldm0s/rat_memcache |
| max_upload_size | |
| id | 1852875 |
| size | 513,834 |
高性能 Memcached 协议兼容服务器,支持双层缓存和 melange_db 持久化存储
RatMemCache 是一个基于 Rust 实现的高性能缓存系统,提供了以下两种使用模式:
RatMemCache 是目前少数能在 Windows 平台原生运行的高性能 Memcached 兼容服务器!
采用 LGPL-v3 许可证,支持自由使用和修改。
本项目采用 LGPL-v3 许可证。这意味着:
详见 LICENSE 文件。
RatMemCache 提供了灵活的特性选择,满足不同场景的需求:
[dependencies]
rat_memcache = "0.2.0"
[dependencies]
rat_memcache = { version = "0.2.0", features = ["full-features"] }
[dependencies]
rat_memcache = { version = "0.2.0", features = ["server"] }
[dependencies]
rat_memcache = { version = "0.2.0", features = ["cache-lib", "ttl-support", "metrics"] }
RatMemCache 可以作为 Rust 库集成到你的项目中,提供高性能的双层缓存功能。
[dependencies]
rat_memcache = "0.2.0"
tokio = { version = "1.0", features = ["full"] }
use rat_memcache::{RatMemCacheBuilder, CacheOptions};
use bytes::Bytes;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建缓存实例 - 使用默认配置
let cache = RatMemCacheBuilder::new()
.build()
.await?;
// 基本操作
let key = "my_key".to_string();
let value = Bytes::from("my_value");
// 设置缓存
cache.set(key.clone(), value.clone()).await?;
// 获取缓存
if let Some(retrieved) = cache.get(&key).await? {
println!("Retrieved: {:?}", retrieved);
}
// 设置带 TTL 的缓存(60秒过期)
cache.set_with_ttl("temp_key".to_string(), Bytes::from("temp_value"), 60).await?;
// 检查缓存是否存在
let exists = cache.contains_key("temp_key").await?;
println!("Key exists: {}", exists);
// 获取缓存键列表
let keys = cache.keys().await?;
println!("Cache keys: {:?}", keys);
// 条件删除
let deleted = cache.delete("temp_key").await?;
println!("Key deleted: {}", deleted);
// 优雅关闭
cache.shutdown().await?;
Ok(())
}
use rat_memcache::{RatMemCacheBuilder, EvictionStrategy};
use rat_memcache::config::{L1Config, L2Config, TtlConfig};
use std::path::PathBuf;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 自定义 L1 配置(2GB 内存限制)
let l1_config = L1Config {
max_memory: 2 * 1024 * 1024 * 1024, // 2GB in bytes
max_entries: 1_000_000, // 100万条记录
eviction_strategy: EvictionStrategy::Lru,
};
// 自定义 L2 配置(10GB 磁盘空间)
let l2_config = L2Config {
enable_l2_cache: true,
data_dir: Some(PathBuf::from("./cache_data")),
clear_on_startup: false,
max_disk_size: 10 * 1024 * 1024 * 1024, // 10GB in bytes
write_buffer_size: 64 * 1024 * 1024, // 64MB
max_write_buffer_number: 3,
block_cache_size: 32 * 1024 * 1024, // 32MB
enable_compression: true,
compression_level: 6,
background_threads: 2,
database_engine: Default::default(),
melange_config: Default::default(),
};
// TTL 配置
let ttl_config = TtlConfig {
default_ttl: Some(3600), // 默认1小时
max_ttl: 86400, // 最大24小时
cleanup_interval: 300, // 5分钟清理一次
..Default::default()
};
let cache = RatMemCacheBuilder::new()
.l1_config(l1_config)
.l2_config(l2_config)
.ttl_config(ttl_config)
.build()
.await?;
// 使用缓存...
Ok(())
}
use rat_memcache::{RatMemCacheBuilder, EvictionStrategy};
use rat_memcache::config::{L1Config, L2Config, PerformanceConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 生产环境配置 - 优化性能配置
let cache = RatMemCacheBuilder::new()
.l1_config(L1Config {
max_memory: 4 * 1024 * 1024 * 1024, // 4GB
max_entries: 2_000_000,
eviction_strategy: EvictionStrategy::Lru,
})
.l2_config(L2Config {
enable_l2_cache: true,
max_disk_size: 50 * 1024 * 1024 * 1024, // 50GB
enable_compression: true,
background_threads: 4,
..Default::default()
})
.performance_config(PerformanceConfig {
..Default::default()
})
.build()
.await?;
// 应用程序主逻辑...
Ok(())
}
# 克隆项目
git clone https://github.com/0ldm0s/rat_memcache.git
cd rat_memcache
# 编译(启用服务器功能)
cargo build --release
# 使用默认配置启动服务器
cargo run --bin rat_memcached
# 指定绑定地址
cargo run --bin rat_memcached -- --bind 0.0.0.0:11211
# 使用配置文件
cargo run --bin rat_memcached -- --config custom_config.toml
# 作为守护进程运行
cargo run --bin rat_memcached -- --daemon --pid-file /var/run/rat_memcached.pid
在 Windows 平台上,RatMemCache 提供了与 Linux/macX 完全一致的功能:
# Windows 编译
cargo build --release
# Windows 启动服务器
cargo run --bin rat_memcached
# Windows 指定端口
cargo run --bin rat_memcached -- --bind 127.0.0.1:11211
# Windows 后台运行(使用 PowerShell Start-Process)
Start-Process cargo -ArgumentList "run --bin rat_memcached -- --bind 0.0.0.0:11211" -NoNewWindow
Windows 优势:
RatMemCache 完全兼容 Memcached 协议,支持以下命令:
get / gets - 获取数据set / add / replace / append / prepend / cas - 设置数据delete - 删除数据incr / decr - 增减数值flush_all - 清空所有数据version - 获取版本信息你可以使用任何标准的 Memcached 客户端连接到 RatMemCache 服务器:
# 使用 telnet 测试
telnet 127.0.0.1 11211
# 使用 memcached-cli
memcached-cli --server 127.0.0.1:11211
项目使用 TOML 格式配置文件,支持灵活的配置选项:
[l1]
max_memory = 1073741824 # 1GB
max_entries = 100000
eviction_strategy = "Lru"
[l2]
enable_l2_cache = true
data_dir = "./rat_memcache_data"
max_disk_size = 1073741824 # 1GB
enable_compression = true
[compression]
enable_lz4 = true
compression_threshold = 1024
compression_level = 6
[ttl]
default_ttl = 3600 # 1小时
cleanup_interval = 300 # 5分钟
[performance]
worker_threads = 4
enable_concurrency = true
read_write_separation = true
large_value_threshold = 10240 # 10KB
RatMemCache 基于 rat_logger 提供了灵活的日志配置,支持性能调优:
[logging]
# 基本日志配置
level = "INFO" # 日志级别: trace, debug, info, warn, error, off
enable_colors = true # 启用彩色输出
show_timestamp = true # 显示时间戳
enable_performance_logs = true # 启用性能日志
enable_audit_logs = true # 启用操作审计日志
enable_cache_logs = true # 启用缓存操作日志
# 高级日志配置(性能调优)
enable_logging = true # 是否完全禁用日志系统(设置为false可获得最高性能)
enable_async = false # 是否启用异步模式(异步模式可提高性能,但可能在程序崩溃时丢失日志)
# 异步模式的批量配置(仅在enable_async=true时生效)
batch_size = 2048 # 批量大小(字节)
batch_interval_ms = 25 # 批量时间间隔(毫秒)
buffer_size = 16384 # 缓冲区大小(字节)
最高性能模式(适合生产环境):
[logging]
enable_logging = false
异步高性能模式(适合高负载场景):
[logging]
enable_logging = true
enable_async = true
batch_size = 4096
batch_interval_ms = 50
buffer_size = 32768
调试模式(开发环境):
[logging]
enable_logging = true
enable_async = false
level = "DEBUG"
enable_performance_logs = true
enable_cache_logs = true
# 构建项目
cargo build
# 构建发布版本
cargo build --release
# 运行测试
cargo test
# 运行基准测试
cargo bench
# 检查代码格式
cargo fmt
# 检查代码质量
cargo clippy
┌─────────────────────────────────────────────────────────┐
│ RatMemCache │
├─────────────────┬───────────────────────────────────────┤
│ 服务器层 │ 库接口层 │
│ (Memcached │ (Rust API) │
│ Protocol) │ │
├─────────────────┴───────────────────────────────────────┤
│ 核心层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ L1缓存 │ │ TTL管理 │ │ 流式传输 │ │
│ │ (内存) │ │ │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────┤
│ 存储层 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MelangeDB L2 缓存 │ │
│ │ (持久化存储) │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
在标准测试环境下(4核CPU,8GB内存):
重要提醒: 当传输超过40KB的大值数据时,标准的memcached协议可能会遇到socket缓冲区限制,导致传输超时或不完整。
RatMemCache提供了增强型流式传输协议,可以有效解决大值传输问题:
# 标准GET(可能超时)
get large_key
# 流式GET(推荐)
streaming_get large_key 16384 # 16KB块大小
# 见 demo/streaming_protocol_demo.py - 完整的性能对比演示
主要依赖:
欢迎贡献代码!请遵循以下步骤:
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)感谢以下开源项目:
本项目采用 GNU Lesser General Public License v3.0 or later (LGPL-3.0-or-later) 许可证。
这意味着:
详见 LICENSE 文件。