Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
小さく始める自作入門!~RedisっぽいKVSを作って学んだこと~
Search
yamaken_0216
November 12, 2025
Programming
0
120
小さく始める自作入門!~RedisっぽいKVSを作って学んだこと~
TechBull LT&交流会 #3
yamaken_0216
November 12, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
Implementation Patterns
denyspoltorak
0
140
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
430
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
200
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
340
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
920
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
210
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
330
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
510
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
640
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.4k
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
130
Featured
See All Featured
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.8k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
110
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
150
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
140
The SEO Collaboration Effect
kristinabergwall1
0
320
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
76
Tell your own story through comics
letsgokoyo
0
770
WENDY [Excerpt]
tessaabrams
9
35k
The browser strikes back
jonoalderson
0
290
Site-Speed That Sticks
csswizardry
13
1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Transcript
小さく始める 自作入門! ~RedisっぽいKVSを作って学んだこと~
やまけん Profile SaaS企業でバックエンドエンジニアをしています。 最近、TechBullの運営になりました。 趣味 サッカー観戦、旅行、Podcast聴くこと 少し前に群馬で滝行体験ツアーにいきました。 yamaken_0216
何か自作してみたいな〜。 って思う時期ありますよね。
Key-Value Store作ってみよう!
なぜ、Key-Value Storeを選んだのか 身近なミドルウェアで仕様が明確 使い方を理解しており、動作イメージが掴みやすい 最小構成が数十行で完成 小さく始めて段階的に機能追加できる 参考となるOSSがある Redis, Valkey, Memcachedなどのコードを参考にできる
(今回はRedisを参考にしました。 )
Redisの説明 正式名称 : REmote DIctionary Server インメモリKVS RESP ( REdis
Serialization Protocol)で通信 データ構造 String, List, Set, Hash, Sorted Set... その他の機能 永続化、 Pub/Sub、 トランザクション...
redis-cli (Client) redis-server ユーザー Redis の説明 コマンド入力 入力されたコマンドを RESPにシリアライズする Responseされた
RESPをデシリアライズする RequestされたRESPを 解析して、処理する Request Response 結果を返す
redis-cli (Client) redis-server ユーザー Redis の説明 コマンド入力 入力されたコマンドを RESPにシリアライズする Responseされた
RESPをデシリアライズする RequestされたRESPを 解析して、処理する Request Response 結果を返す 今回自作するところ
どう作っていくのか。 コアはシンプルなので簡単な流れだけ紹介!
どう作っていくのか。 1. 基本的なRESPを理解する 2. TCPサーバーとPINGコマンドを作る 3. SET,GETコマンドを実装する 4. 好きなように拡張しよう
どう作っていくのか。 1. 基本的なRESPを理解する 2. TCPサーバーとPINGコマンドを作る 3. SET,GETコマンドを実装する 4. 好きなように拡張しよう
1 . 基本的なRESPを理解する RESPとは、Redis Serialization Protocolのこと Redisクライアントとサーバーが通信するためのテキスト ベースのプロトコル RESP2とRESP3がある この段階では、基本的なプロトコルのRESP2を使う
1 . 基本的なRESPを理解する 出典: Redis 公式ドキュメント https://redis.io/docs/latest/develop/reference/protocol-spec/
どう作っていくのか。 1. 基本的なRESPを理解する 2. TCPサーバーとPINGコマンドを作る 3. SET,GETコマンドを実装する 4. 好きなように拡張しよう
2.TCPサーバーとPINGコマンドを作る TCPサーバーを作る 好きな言語 標準ライブラリで提供されているものを使うと簡単! 簡易的なPINGコマンドを作る PINGというコマンドがリクエストされたらPONGと返す
どう作っていくのか。 1. 基本的なRESPを理解する 2. TCPサーバーとPINGコマンドを作る 3. SET,GETコマンドを実装する 4. 好きなように拡張しよう
3.SET,GETコマンドを実装する SETコマンドを実装する リクエスト SET key名 value名 ハッシュ(連想配列)に保存する レスポンス OKを返す
3.SET,GETコマンドを実装する GETコマンドを実装する リクエスト GET key名 ハッシュ(連想配列)からkey名の値を取得する レスポンス 取得した値を返す これで、最小構成でインメモリKVSは完成
どう作っていくのか。 1. 基本的なRESPを理解する 2. TCPサーバーとPINGコマンドを作る 3. SET,GETコマンドを実装する 4. 好きなように拡張しよう
4.好きなように拡張しよう 拡張する機能候補 TTL機能の追加 型の追加( String , List, Set, Hash, Sorted
Set...) データの永続化 ...
自作時に参考になったもの 公式ドキュメント 今回はRedisのドキュメントを参考になった GitHub 自作KVSしてる人のコードもあるので参考になる LLM コードリーディングや仕様の壁打ちに使った
まとめ 公式ドキュメントを読もう 最小構成でどう作るかが大事 LLMを使って理解をする 興味を持った方、ぜひ一緒に自作しましょう!
Thank you!