Skip to content

Commit

Permalink
refactor: use vfs=memdb instead of mode=memory&cache=shared
Browse files Browse the repository at this point in the history
Shared cache is discouraged. The supported alternative
(and increasingly recommended by SQLite developers),
is the memdb VFS (which I believe is supported by all drivers).
I'm sure modernc has it, and mattn also does if compiled with
SQLITE_ENABLE_DESERIALIZE, which became the default in 2021.

ncruces/go-sqlite3#94 (comment)
  • Loading branch information
nalgeon committed Jun 10, 2024
1 parent f8bd947 commit 818954d
Show file tree
Hide file tree
Showing 20 changed files with 30 additions and 30 deletions.
2 changes: 1 addition & 1 deletion cmd/cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
"github.com/nalgeon/redka/internal/redis"
)

const dbURI = ":memory:"
const dbURI = "file:/data.db?vfs=memdb"

func init() {
flag.Usage = func() {
Expand Down
2 changes: 1 addition & 1 deletion cmd/redka/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ var (
)

const driverName = "redka"
const memoryURI = "file:redka?mode=memory&cache=shared"
const memoryURI = "file:/data.db?vfs=memdb"
const pragma = `
pragma journal_mode = wal;
pragma synchronous = normal;
Expand Down
4 changes: 2 additions & 2 deletions docs/performance.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ Redka (in-memory):
./redka -p 6380
redis-benchmark -p 6380 -q -c 10 -n 1000000 -r 10000 -t get,set
SET: 34927.18 requests per second, p50=0.175 msec
GET: 52173.01 requests per second, p50=0.143 msec
SET: 36188.62 requests per second, p50=0.167 msec
GET: 104405.93 requests per second, p50=0.063 msec
```

Redka (persisted to disk):
Expand Down
2 changes: 1 addition & 1 deletion docs/usage-module.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ To open an in-memory database that doesn't persist to disk, use the following pa

```go
// All data is lost when the database is closed.
redka.Open("file:redka?mode=memory&cache=shared")
redka.Open("file:/data.db?vfs=memdb")
```

After opening the database, call `redka.DB` methods to run individual commands:
Expand Down
2 changes: 1 addition & 1 deletion internal/command/conn/conn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func getDB(tb testing.TB) (*redka.DB, redis.Redka) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/command/hash/hash_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func getDB(tb testing.TB) (*redka.DB, redis.Redka) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/command/key/key_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func getDB(tb testing.TB) (*redka.DB, redis.Redka) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/command/list/list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func getDB(tb testing.TB) (*redka.DB, redis.Redka) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/command/server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func getDB(tb testing.TB) (*redka.DB, redis.Redka) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/command/set/set_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (

func getDB(tb testing.TB) (*redka.DB, redis.Redka) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/command/string/string_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func getDB(tb testing.TB) (*redka.DB, redis.Redka) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/command/zset/zset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func getDB(tb testing.TB) (*redka.DB, redis.Redka) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/rhash/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -875,7 +875,7 @@ func TestValues(t *testing.T) {

func getDB(tb testing.TB) (*redka.DB, *rhash.DB) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/rkey/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -610,7 +610,7 @@ func TestScanner(t *testing.T) {

func getDB(tb testing.TB) (*redka.DB, *rkey.DB) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/rlist/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1454,7 +1454,7 @@ func TestTrim(t *testing.T) {

func getDB(tb testing.TB) (*redka.DB, *rlist.DB) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/rset/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1298,7 +1298,7 @@ func TestUnionStore(t *testing.T) {

func getDB(tb testing.TB) (*redka.DB, *rset.DB) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/rstring/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -821,7 +821,7 @@ func TestSetNotExists(t *testing.T) {

func getDB(tb testing.TB) (*redka.DB, *rstring.DB) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/rzset/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1584,7 +1584,7 @@ func TestUnionStore(t *testing.T) {

func getDB(tb testing.TB) (*redka.DB, *rzset.DB) {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/server/handlers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
)

func TestHandlers(t *testing.T) {
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
t.Fatal(err)
}
Expand Down
20 changes: 10 additions & 10 deletions redka_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
)

func ExampleOpen() {
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
panic(err)
}
Expand All @@ -21,7 +21,7 @@ func ExampleOpen() {
}

func ExampleDB_Close() {
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
panic(err)
}
Expand All @@ -33,7 +33,7 @@ func ExampleDB_Hash() {
// Error handling is omitted for brevity.
// In real code, always check for errors.

db, _ := redka.Open(":memory:", nil)
db, _ := redka.Open("file:/data.db?vfs=memdb", nil)
defer db.Close()

ok, err := db.Hash().Set("user:1", "name", "alice")
Expand All @@ -57,7 +57,7 @@ func ExampleDB_Key() {
// Error handling is omitted for brevity.
// In real code, always check for errors.

db, _ := redka.Open(":memory:", nil)
db, _ := redka.Open("file:/data.db?vfs=memdb", nil)
defer db.Close()

_ = db.Str().SetExpires("name", "alice", 60*time.Second)
Expand All @@ -79,7 +79,7 @@ func ExampleDB_Str() {
// Error handling is omitted for brevity.
// In real code, always check for errors.

db, _ := redka.Open(":memory:", nil)
db, _ := redka.Open("file:/data.db?vfs=memdb", nil)
defer db.Close()

_ = db.Str().Set("name", "alice")
Expand All @@ -99,7 +99,7 @@ func ExampleDB_ZSet() {
// Error handling is omitted for brevity.
// In real code, always check for errors.

db, _ := redka.Open(":memory:", nil)
db, _ := redka.Open("file:/data.db?vfs=memdb", nil)
defer db.Close()

ok, err := db.ZSet().Add("race", "alice", 11)
Expand All @@ -121,7 +121,7 @@ func ExampleDB_ZSet() {
}

func ExampleDB_Update() {
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
panic(err)
}
Expand Down Expand Up @@ -153,7 +153,7 @@ func ExampleDB_View() {
// Error handling is omitted for brevity.
// In real code, always check for errors.

db, _ := redka.Open(":memory:", nil)
db, _ := redka.Open("file:/data.db?vfs=memdb", nil)
defer db.Close()

_ = db.Str().SetMany(map[string]any{
Expand Down Expand Up @@ -190,7 +190,7 @@ func ExampleDB_View() {
}

func TestOpenDB(t *testing.T) {
sdb, err := sql.Open("sqlite3", ":memory:")
sdb, err := sql.Open("sqlite3", "file:/data.db?vfs=memdb")
testx.AssertNoErr(t, err)

db, err := redka.OpenDB(sdb, sdb, nil)
Expand Down Expand Up @@ -282,7 +282,7 @@ func TestDBUpdateRollback(t *testing.T) {

func getDB(tb testing.TB) *redka.DB {
tb.Helper()
db, err := redka.Open(":memory:", nil)
db, err := redka.Open("file:/data.db?vfs=memdb", nil)
if err != nil {
tb.Fatal(err)
}
Expand Down

0 comments on commit 818954d

Please sign in to comment.