十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍了sled怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇sled怎么使用文章都会有所收获,下面我们一起来看看吧。
成都创新互联公司IDC提供业务:服务器机柜租赁,成都服务器租用,服务器机柜租赁,重庆服务器租用等四川省内主机托管与主机租用业务;数据中心含:双线机房,BGP机房,电信机房,移动机房,联通机房。
简介
sled = "0.32"
打开数据库
let tree = sled::open("/tmp/welcome-to-sled").expect("open");
// 插入KV,读取Key对应的值
tree.insert("KEY1", "VAL1");
assert_eq!(tree.get(&"KEY1"), Ok(Some(sled::IVec::from("VAL1"))));
// 范围查询
for kv in tree.range("KEY1".."KEY9") {
...
}
// 删除
tree.remove(&"KEY1");
// atomic compare and swap,可以用在并发编程中
tree.compare_and_swap("KEY1", Some("VAL1"), Some("VAL2"));
// 阻塞直到所有修改都写入硬盘
tree.flush();
use {
byteorder::{BigEndian, LittleEndian},
zerocopy::{
byteorder::U64, AsBytes, FromBytes, LayoutVerified, Unaligned,
},
};
// 键结构体
// zerocopy::byteorder::U64保证了数据对齐问题
#[derive(FromBytes, AsBytes, Unaligned)]
#[repr(C)]
struct Key {
a: U64
, b: U64
, }
// 值结构体
#[derive(FromBytes, AsBytes, Unaligned)]
#[repr(C)]
struct Value {
count: U64
, whatever: [u8; 16],
}
let key = Key { a: U64::new(21), b: U64::new(890) };
// 取得键所对应的值,并对其施加给定函数灿做
db.update_and_fetch(key.as_bytes(), |value_opt| {
if let Some(existing) = value_opt {
let mut backing_bytes = sled::IVec::from(existing);
// 验证数据对齐(这里其实不是必须的,因为我们使用了U64)
let layout: LayoutVerified<&mut [u8], Value> =
LayoutVerified::new_unaligned(&mut *backing_bytes)
.expect("bytes do not fit schema");
// 得到底层数据的可变引用
let value: &mut Value = layout.into_mut();
let new_count = value.count.get() + 1;
println!("incrementing count to {}", new_count);
value.count.set(new_count);
Some(backing_bytes)
} else {
println!("setting count to 0");
// 初始化一个Value
Some(sled::IVec::from(
Value { count: U64::new(0), whatever: [0; 16] }.as_bytes(),
))
}
})?;
关于“sled怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“sled怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。