ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
[TOC] > [官方下载](https://sqlite.org/download.html) ## 概述 常用参数 ``` cache=[shared|private] 缓存查询参数确定是使用共享缓存模式还是使用专用缓存打开新数据库。 mode=[ro|rw|rwc|memory] 模式查询参数分别决定新数据库是只读、读写、读写,如果不存在则创建,或者数据库是纯内存数据库,从不与磁盘交互。 ``` ## 内存数据库 没有打开任何磁盘文件,而是纯粹在内存中创建一个新的数据库。一旦关闭数据库连接,数据库就不复存在 ### 基本的内存数据库 go 示例 ``` db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) if err != nil { t.Error(err) } db.AutoMigrate(User{}) db.Create(&User{ UserName: "Bob", Password: "123", }) var user User db.First(&user) t.Logf("%#v",user) // main.User{ID:0x1, UserName:"Bob", Password:"123"} ``` #### 内存与文件数据库的性能对比 <details> <summary>demo_test.go</summary> ``` func BenchmarkSqlite(b *testing.B) { b.Run("内存数据库",BenchmarkMemory) b.Run("文件数据库",BenchmarkFile) } func BenchmarkMemory(b *testing.B) { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) if err != nil { b.Error(err) } db.AutoMigrate(User{}) db.Create(&User{ UserName: "Bob", Password: "123", }) for i := 0; i < b.N; i++ { var user User db.First(&user) } } func BenchmarkFile(b *testing.B) { db, err := gorm.Open(sqlite.Open("test2.db"), &gorm.Config{}) if err != nil { b.Error(err) } db.AutoMigrate(User{}) db.Create(&User{ UserName: "Bob", Password: "123", }) for i := 0; i < b.N; i++ { var user User db.First(&user) } } ``` </details> <br/> output ``` BenchmarkSqlite/内存数据库-4 59682 21035 ns/op BenchmarkSqlite/文件数据库-4 16357 85115 ns/op ``` ### 共享内存 1. 共享内存可以在不同进程简共享 2. 共享内存有两种写作方式 方式一: memory:?cache=shared 方式二: file::memdb1?mode=memory&cache=shared ,此方式可以指定内存数据库名字 <details> <summary>demo_test.go</summary> ``` func TestMemoryShare(t *testing.T) { //db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared")) db, err := gorm.Open(sqlite.Open("file::memdb1?mode=memory&cache=shared")) if err != nil { t.Error(err) } db.AutoMigrate(User{}) db.Create(&User{ UserName: "Bob", Password: "123", }) //db1, err := gorm.Open(sqlite.Open("file::memory:?cache=shared")) db1, err := gorm.Open(sqlite.Open("file::memdb1?mode=memory&cache=shared")) if err != nil { t.Error(err) } var user User db1.First(&user) t.Logf("%#v",user) } ``` </details> <br/>