6 个版本
0.5.3 | 2024年7月29日 |
---|---|
0.5.0 | 2024年4月29日 |
0.4.4 | 2024年2月16日 |
0.4.0 |
|
0.3.2 |
|
#272 在 数据库接口
每月 129 次下载
110KB
3K SLoC
库使用基于文件的 mmap 来存储键值
这是 MMKV 的 Rust 版本。
默认情况下,此库使用 CRC8 检查数据完整性。
如果包含功能 encryption
,此库将使用 AES-EAX 加密数据。
MMKV 是线程安全的,但不能保证跨进程数据一致性。如果您想在跨进程场景中使用它,请确保没有相互竞争的写入。
如何使用
添加依赖
cargoadd mmkv
然后直接使用 MMKV
use mmkv::{LogLevel, MMKV};
fn main() {
// Set the log level of the library
MMKV::set_log_level(LogLevel::Verbose);
let temp_dir = std::env::temp_dir();
let dir = temp_dir.join("test1");
let _ = std::fs::create_dir(&dir);
// Initialize it with a directory, the library will crate a file,
// named "mini_mmkv" under this dir.
let mmkv = MMKV::new(dir.to_str().unwrap());
// Put and get result, for most case should be Ok(()),
// if something wrong, it contains the useful info.
let ret = mmkv.put_i32("key1", 1);
println!("{:?}", ret); // Ok(())
// Get result with key
println!("{:?}", mmkv.get_i32("key1")); // Ok(1)
// Put and unwrap the result
mmkv.put_str("key1", "value").unwrap();
println!("{:?}", mmkv.get_i32("key1")); // Err(TypeMissMatch)
println!("{:?}", mmkv.get_str("key1")); // Ok("value")
let dir = temp_dir.join("test2");
let _ = std::fs::create_dir(&dir);
// Create another instance with different path
let new_mmkv = MMKV::new(dir.to_str().unwrap());
new_mmkv.put_bool("key1", true).unwrap();
println!("{:?}", new_mmkv.get_bool("key1")); // Ok(true)
// clear all data to free disk space
new_mmkv.clear_data();
}
使用加密功能
添加依赖
cargoadd mmkv --功能encryption
然后使用加密凭证初始化 MMKV
letmmkv= MMKV::new(".", "88C51C536176AD8A8EE4A06F62EE897E")
加密会大大降低读写效率,并会增加文件大小,请自行承担风险!
在 Android 项目中使用
在 gradle 中添加库依赖
dependencies {
implementation("net.yangkx:mmkv:0.4.0")
// Or another one with encryption feature
// implementation("net.yangkx:mmkv-encrypt:0.4.0")
}
您可以在 Releases 中找到所有版本。
使用 Kotlin API
class MyApplication : Application() {
companion object {
lateinit var mmkv: MMKV
}
override fun onCreate() {
super.onCreate()
MMKV.setLogLevel(LogLevel.VERBOSE)
val dir = this.getDir("mmkv", Context.MODE_PRIVATE)
mmkv = MMKV(dir.absolutePath)
// If you are using mmkv with encryption
// mmkv = MMKV(dir.absolutePath, "88C51C536176AD8A8EE4A06F62EE897E")
}
}
class MainActivity : AppCompatActivity() {
private val mmkv: MMKV
get() = MyApplication.mmkv
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
mmkv.putString("first_key", "first value")
mmkv.putInt("second_key", 1024)
mmkv.putBool("third_key", true)
binding.string.text = mmkv.getString("first_key", "default")
binding.integer.text = mmkv.getInt("second_key", 0).toString()
binding.bool.text = mmkv.getBool("third_key", false).toString()
}
}
查看 android 示例以获取更多详细信息。
在 iOS 项目中使用
-
将此仓库作为 Swift 包依赖添加到您的 Xcode 项目中。
-
在使用 API 之前初始化 MMKV 实例,例如
import Foundation import MMKV class MMKVManager { static var inst = initMMKV() } func initMMKV() -> MMKV { let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) let documentsDirectory = paths[0] let docURL = URL(string: documentsDirectory)! let dataPath = docURL.appendingPathComponent("mmkv") if !FileManager.default.fileExists(atPath: dataPath.path) { do { try FileManager.default.createDirectory(atPath: dataPath.path, withIntermediateDirectories: true, attributes: nil) } catch { print(error.localizedDescription) } } return MMKV(dataPath.path) }
-
使用
MMKV.shared
直接访问 APIimport SwiftUI import MMKV struct ContentView: View { @State var textContent: String = "Hello, world!" var body: some View { Text(textContent) .onTapGesture { let value = MMKVManager.inst.getInt32(key: "int_key").unwrap(defalutValue: 0) MMKVManager.inst.putInt32(key: "int_key", value: value + 1).unwrap(defalutValue: ()) textContent = MMKVManager.inst.getInt32(key: "int_key").unwrap(defalutValue: 0).formatted() } } }
查看 ios 示例以获取更多详细信息。
依赖
~3–16MB
~135K SLoC