iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0

Redis 是一個用 C 寫成的鍵值資料庫,顧名思義:儲存「鍵(Key)」與「值(Value)」的資料庫。

基礎功能

可以將 Redis 想像成一個巨大的 Hashmap,但它具有:資料持久化(服務關閉後,資料不會消失)以及能夠在不同的服務之間共享資料(無論是不是在同一台主機上)的特性。

效能

Redis 的效能非常優異,這得益於它的開發者有著深厚的 C 語言功力與出色的資料結構及演算法實作。

我曾經在 2022 年撰文 Redis 字串研究,由此可以一窺 Redis 開發者對資料結構的設計具有獨到的見解。

不過 Redis 在效能上也並非一騎絕塵:這邊以 Valkey 與 Garnet 為例。

Valkey

Valkey 是一個知名的 Redis 分支。當時在 Redis 8 發佈時更改了授權條款,以致於社群基於 7.2.4 分支開發,並獲得 Linux 基金會的支持。

Valkey 在 Redis 效能的基礎上再更進一步,可以從 Performance Optimization Methodology for Valkey - Part 1 等系列文章中看到一些 Valkey 對 Redis 的最佳化手段。

Garnet

Garnet 則是微軟研究院的開源產物,它用一種截然不同的思路:用 C# 做出一個相容於 Redis 的服務--這其實很反直覺,因為絕大多數人都會認為相對低階的 C 語言應該比高階的 C# 擁有更好的效能。

我個人傾向於認為這個是微軟的「火力展示」,在 Faster: A Concurrent Key-Value Store with In-Place Updates 這篇論文提到他們如何用 C# 打造一個高效能的鍵值資料結構 Faster,而這個正是 Garnet 的基礎之一。

藉由選用更高效能的資料結構與演算法,再加上足夠優秀的編譯器,完全可以達成用高階語言勝過低階語言效能的目標。

功能演進

從近年的 Redis 版本特性來看,Redis 並不想只做一個單純的鍵值資料庫。

為了營利,Redis 提供許多閉源的進階付費功能;而開源版本的也為了追逐 AI 這塊大餅而加入了許多功能:例如在 Redis 8 加入的 Vector Sets 很明顯地是為了服務機器學習。

註:這邊說明一下,技術沒有對錯,只有選擇的道路不同。我並不完全認可 Redis 的技術路線,但是完全能夠理解他們的決策。


上一篇
[Day 01] 在旅程開始之前
系列文
從零開始打造 Redis:以 Go 建立 Production Ready 應用程式2
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言