SQLite - Redis - Redka

Redka 是一個基於 SQLite 實現的 Redis 替代產品,實現了 Redis 的核心功能,並且完全兼容 Redis API。它可以用於輕量級緩存、嵌入式系統、快速原型開發以及需要事務 ACID 特性的鍵值操作等場景。

功能特性

Redka 的主要特點包括:

Redka 目前已經實現了以下五種 Redis 數據類型:

除此之外,Redka 還提供了鍵管理、服務器 / 連接管理以及事務命令。

安裝使用

Redka 支持兩種部署方式:獨立服務器或者進程內 Go 語言模塊。

對於獨立服務器部署,可以在發佈頁面下載並解壓,例如 Linux 版本:

curl -L -O "https://github.com/nalgeon/redka/releases/download/v0.5.3/redka_linux_amd64.zip"
unzip redka_linux_amd64.zip
chmod +x redka

執行 redka 文件運行服務,語法如下:

redka [-h host] [-p port] [-s unix-socket] [db-path]

例如:

./redka
./redka data.db
./redka -h 0.0.0.0 -p 6379 data.db
./redka -s /tmp/redka.sock data.db

默認主機爲 localhost,端口爲 6379,數據庫路徑爲空表示使用內存存儲;如果指定了 unix 套接字,將會覆蓋主機 / 端口。

啓動服務之後,我們可以使用任何 Redis 客戶端工具或者驅動進行連接,例如 redis-cli:

redis-cli -h localhost -p 6379

127.0.0.1:6379> echo hello
"hello"
127.0.0.1:6379> set name alice
OK
127.0.0.1:6379> get name
"alice"

如果使用 Go 語言,可以直接使用 redka 模塊在進程中運行。首先,安裝模塊和 SQLite 驅動:

go get github.com/nalgeon/redka

go get github.com/mattn/go-sqlite3

然後就可以在 Go 程序中創建數據庫:

// A basic example of using Redka
// with github.com/mattn/go-sqlite3 driver.
package main

import(
"log"
"log/slog"

_"github.com/mattn/go-sqlite3"
"github.com/nalgeon/redka"
)

funcmain(){
// Open a database.
	db, err := redka.Open("data.db",nil)
if err !=nil{
		log.Fatal(err)
}
defer db.Close()

// Set some string keys.
	err = db.Str().Set("name","alice")
	slog.Info("set","err", err)
	err = db.Str().Set("age",25)
	slog.Info("set","err", err)

// Check if the keys exist.
	count, err := db.Key().Count("name","age","city")
	slog.Info("count","count", count,"err", err)

// Get a key.
	name, err := db.Str().Get("name")
	slog.Info("get","name", name,"err", err)
}

以上程序的輸出結果:

count count=err=<nil>
get  err=<nil>

性能測試

Redka 作者在一臺 Macbook Air 筆記本中使用 redis-benchmark 工具比較了 兩者的性能,結果顯示 Redka 相比 Redis 慢了 2 - 5 倍,考慮到前者使用關係型數據庫作爲存儲,這個結果在意料之中。即便如此,測試中的 Redka 寫入性能達到了 26000/s,讀取性能達到了 100000/s,已經可以滿足大多數應用程序了。

具體測試方法和硬件配置可以參考下面這篇文檔:

https://github.com/nalgeon/redka/blob/main/docs/performance.md

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/dq-jP6iE3UVQRRO0LQe2lg