SQLite + Redis = Redka

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

在這里插入圖片描述

功能特性

Redka 的主要特點包括:

  • 使用 SQLite 作為存儲,數據大小不必受到內存大小限制。
  • 支持 ACID 事務,支持原子性操作和復雜事務。
  • 提供 SQL 視圖,方便數據訪問和查詢。
  • 支持進程內(Go API)運行和獨立服務器部署(RESP)。
  • 兼容 Redis 命令和通信協議。

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

  • 字符串(Strings),這是最基本的 Redis 類型,表示一個字節序列。
  • 列表(Lists),按插入順序排序的字符串序列。
  • 集合(Sets),唯一字符串的無序集合。
  • 哈希(Hashes),字段-值的(哈希)映射。
  • 有序集合(Sorted Sets),按照每個字符串的關聯分數排序的唯一字符串集合。

除此之外,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 6379127.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/redkago get github.com/mattn/go-sqlite3

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

// A basic example of using Redka
// with github.com/mattn/go-sqlite3 driver.
package mainimport ("log""log/slog"_ "github.com/mattn/go-sqlite3""github.com/nalgeon/redka"
)func main() {// 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=2 err=<nil>
get name="alice" 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76789.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

202529 | RocketMQ 簡介 + 安裝 + 集群搭建 + 消費模式 + 消費者組

RocketMQ簡介 RocketMQ 簡介 Apache RocketMQ 是一款開源的 分布式消息中間件&#xff08;Message Queue, MQ&#xff09;&#xff0c;由阿里巴巴團隊研發并捐贈給 Apache 基金會&#xff0c;現已成為頂級項目。它專為 高吞吐、低延遲、高可靠 的分布式場景設計&#xff0c;廣…

Go語言--語法基礎4--基本數據類型--整數類型

整型是所有編程語言里最基礎的數據類型。 Go 語言支持如下所示的這些整型類型。 需要注意的是&#xff0c; int 和 int32 在 Go 語言里被認為是兩種不同的類型&#xff0c;編譯器也不會幫你自動做類型轉換&#xff0c; 比如以下的例子會有編譯錯誤&#xff1a; var value2 in…

競拍商城:電商創新的博弈場與未來趨勢

競拍商城&#xff1a;電商創新的博弈場與未來趨勢 在傳統電商趨于同質化的今天&#xff0c;競拍商城憑借其獨特的交易機制和用戶激勵模式&#xff0c;成為電商領域的新寵。通過結合拍賣的博弈屬性與電商的便捷性&#xff0c;競拍商城不僅重塑了消費體驗&#xff0c;更催生了全…

Linux : 多線程互斥

目錄 一 前言 二 線程互斥 三 Mutex互斥量 1. 定義一個鎖&#xff08;造鎖&#xff09; 2. 初始化鎖 3. 上鎖 4. 解鎖 5. 摧毀鎖 四 鎖的使用 五 鎖的宏初始化 六 鎖的原理 1.如何看待鎖&#xff1f; 2. 如何理解加鎖和解鎖的本質 七 c封裝互斥鎖 八 可重入…

論文閱讀筆記——Reactive Diffusion Policy

RDP 論文 通過 AR 提供實時觸覺/力反饋&#xff1b;慢速擴散策略&#xff0c;用于預測低頻潛在空間中的高層動作分塊&#xff1b;快速非對稱分詞器實現閉環反饋控制。 ACT、 π 0 \pi_0 π0? 采取了動作分塊&#xff0c;在動作分塊執行期間處于開環狀態&#xff0c;無法及時響…

swagger 注釋說明

一、接口注釋核心字段 在 Go 的路由處理函數&#xff08;Handler&#xff09;上方添加注釋&#xff0c;支持以下常用注解&#xff1a; 注解名稱用途說明示例格式Summary接口簡要描述Summary 創建用戶Description接口詳細說明Description 通過用戶名和郵箱創建新用戶Tags接口分…

STM32 HAL庫 OLED驅動實現

一、概述 1.1 OLED 顯示屏簡介 OLED&#xff08;Organic Light - Emitting Diode&#xff09;即有機發光二極管&#xff0c;與傳統的 LCD 顯示屏相比&#xff0c;OLED 具有自發光、視角廣、響應速度快、對比度高、功耗低等優點。在嵌入式系統中&#xff0c;OLED 顯示屏常被用…

Web開發-JavaEE應用動態接口代理原生反序列化危險Invoke重寫方法利用鏈

知識點&#xff1a; 1、安全開發-JavaEE-動態代理&序列化&反序列化 2、安全開發-JavaEE-readObject&toString方法 一、演示案例-WEB開發-JavaEE-動態代理 動態代理 代理模式Java當中最常用的設計模式之一。其特征是代理類與委托類有同樣的接口&#xff0c;代理類…

K8s是常用命令和解釋

K8s高頻命令 獲取資源信息&#xff0c;如獲取 Pod、Service、Deployment等資源狀態信息 kubectl get創建資源如創建Pod、Service、Deployment等資源 kubectl create刪除資源&#xff0c;如刪除Pod、Service、Deployment等資源 kubectl delete 應用配置文件&#xff0c;如引用D…

【模態分解】EMD-經驗模態分解

算法配置頁面&#xff0c;也可以一鍵導出結果數據 報表自定義繪制 獲取和下載【PHM學習軟件PHM源碼】的方式 獲取方式&#xff1a;Docshttps://jcn362s9p4t8.feishu.cn/wiki/A0NXwPxY3ie1cGkOy08cru6vnvc

TDengine 語言連接器(Go)

簡介 driver-go 是 TDengine 的官方 Go 語言連接器&#xff0c;實現了 Go 語言 database/sql 包的接口。Go 開發人員可以通過它開發存取 TDengine 集群數據的應用軟件。 Go 版本兼容性 支持 Go 1.14 及以上版本。 支持的平臺 原生連接支持的平臺和 TDengine 客戶端驅動支持…

鏈接世界:計算機網絡的核心與前沿

計算機網絡引言 在數字化時代&#xff0c;計算機網絡已經成為我們日常生活和工作中不可或缺的基礎設施。從簡單的局域網&#xff08;LAN&#xff09;到全球互聯網&#xff0c;計算機網絡將數以億計的設備連接在一起&#xff0c;推動了信息交換、資源共享以及全球化的進程。 什…

AI agents系列之全面介紹

隨著大型語言模型(LLMs)的出現,人工智能(AI)取得了巨大的飛躍。這些強大的系統徹底改變了自然語言處理,但當它們與代理能力結合時,才真正釋放出潛力——能夠自主地推理、規劃和行動。這就是LLM代理大顯身手的地方,它們代表了我們與AI交互以及利用AI的方式的范式轉變。 …

如何使用AI輔助開發CSS3 - 通義靈碼功能全解析

一、引言 CSS3 作為最新的 CSS 標準&#xff0c;引入了眾多新特性&#xff0c;如彈性布局、網格布局等&#xff0c;極大地豐富了網頁樣式的設計能力。然而&#xff0c;CSS3 的樣式規則繁多&#xff0c;記憶所有規則對于開發者來說幾乎是不可能的任務。在實際開發中&#xff0c…

復刻系列-星穹鐵道 3.2 版本先行展示頁

復刻星穹鐵道 3.2 版本先行展示頁 0. 視頻 手搓&#xff5e;星穹鐵道&#xff5e;展示頁&#xff5e;&#xff5e;&#xff5e; 1. 基本信息 作者: 啊是特嗷桃系列: 復刻系列官方的網站: 《崩壞&#xff1a;星穹鐵道》3.2版本「走過安眠地的花叢」專題展示頁現已上線復刻的網…

爬蟲:IP代理

什么是代理 代理服務器 代理服務器的作用 就是用來轉發請求和響應 在爬蟲中為何需要使用代理&#xff1f; 有些時候&#xff0c;需要對網站服務器發起高頻的請求&#xff0c;網站的服務器會檢測到這樣的異常現象&#xff0c;則會講請求對應機器的ip地址加入黑名單&#xff…

協程的原生掛起與恢復機制

目錄 &#x1f50d; 一、從開發者視角看協程掛起與恢復 &#x1f9e0; 二、協程掛起和恢復的機制原理&#xff1a;核心關鍵詞 ? suspend 函數 ≠ 普通函數 ? Continuation&#xff08;協程的控制器&#xff09; &#x1f527; 三、編譯器做了什么&#xff1f;&#xff0…

c++11--std::forwaord--完美轉發

std::forword的作用 完美轉發的核心目的是保持參數的原始類型&#xff08;包括const/volatile限定符和左值/右值性質&#xff09;不變地傳遞給其他函數。 為什么需要完美轉發 在沒有完美轉發之前&#xff0c;我們面臨以下問題&#xff1a; 模板參數傳遞中的值類別丟失 當參數…

Linux安裝開源版MQTT Broker——EMQX服務器環境從零到一的詳細搭建教程

零、EMQX各個版本的區別 EMQX各個版本的功能對比詳情https://docs.emqx.com/zh/emqx/latest/getting-started/feature-comparison.html

計算機組成原理-存儲器

1. 存儲器的定義與作用 存儲器是計算機系統中用于存儲程序、數據和中間結果的硬件設備&#xff0c;是計算機五大核心部件之一。 核心功能&#xff1a; 提供數據的 臨時或永久存儲 能力。支持CPU按需快速存取指令和數據&#xff0c;是程序運行的物理基礎。 2. 存儲器的分類 …