Sled简介
Sled是一个用纯Rust实现的嵌入式键值数据库,它具有以下特点:
- 纯Rust实现,保证内存安全
- 嵌入式设计,无需独立服务器
- 类Redis的键值对存储
- 本地文件持久化
- 高性能和可靠性
与传统数据库的区别
传统数据库(如MySQL)
- 需要独立的数据库服务器
- 需要开放网络端口
- 客户端-服务器架构
- 支持复杂的SQL查询
嵌入式数据库(如Sled)
- 直接嵌入应用程序
- 使用本地文件存储
- 无需网络连接
- 简单的键值对操作
基本使用
1. 添加依赖
1 2
| [dependencies] sled = "0.34"
|
2. 打开数据库
1 2 3 4 5 6 7
| use sled::Db;
fn main() -> sled::Result<()> { let db = sled::open("data/blocks")?; Ok(()) }
|
3. 基本操作
存储数据
1 2 3 4 5
| db.insert("key", "value")?;
db.insert(b"key", b"value")?;
|
读取数据
1 2 3 4 5
| match db.get("key")? { Some(value) => println!("找到值: {:?}", value), None => println!("未找到值"), }
|
删除数据
持久化
高级特性
1. 原子操作
1 2
| db.compare_and_swap("key", Some("old"), Some("new"))?;
|
2. 批量操作
1 2 3 4 5
| let batch = sled::Batch::default() .insert(b"k1", b"v1") .insert(b"k2", b"v2") .remove(b"k3"); db.apply_batch(batch)?;
|
3. 事务支持
1 2 3 4 5 6
| let tree = db.open_tree("my_tree")?; tree.transaction(|tree| { tree.insert("key1", "value1")?; tree.insert("key2", "value2")?; Ok(()) })?;
|