您好,登錄后才能下訂單哦!
這篇文章主要介紹了sled怎么使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇sled怎么使用文章都會有所收獲,下面我們一起來看看吧。
簡介
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<BigEndian>,
b: U64<BigEndian>,
}
// 值結構體
#[derive(FromBytes, AsBytes, Unaligned)]
#[repr(C)]
struct Value {
count: U64<LittleEndian>,
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怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。