【入門編】 Hash型:数値演算 – Redis

やあ。Redisの世界へようこそ。
Redisを「単なる高速な辞書」だと思っているなら、それはまだ入り口に立ったばかりだよ。

今日は、Redisが誇る強力な武器の一つ、「ハッシュ型の数値演算」について話をしよう。プログラミングにおいて、数字を数えたり、合計を出したりするのは日常茶飯事だよね? でも、それを「安全に」「高速に」行うのは意外と難しい。

Redisを使えば、その悩みは一瞬で消える。なぜなら、Redisは「アトミック(不可分)」という魔法を使えるからだ。

さあ、肩の力を抜いて、一緒に学んでいこう。

—

1. なぜ「ハッシュ」を使うのか?

まずはイメージしてみてほしい。君がオンラインショップのシステムを作っているとする。商品ごとに「在庫数」や「閲覧数」を管理したいよね。

もし商品が1,000個あったら、1,000個の独立したキーを作るだろうか? いや、それは部屋に1,000個のバラバラの箱を置くようなものだ。管理が大変だよね。

Redisのハッシュ(Hash)は、一つの大きな「タンス」のようなものだ。
一つのタンスの中に「引き出し」がたくさんあり、その引き出し一つひとつに名前(フィールド)を付けて、値をしまっておける。

  • タンスの名前: `product:101`
  • 引き出しの名前(フィールド): `stock`(在庫), `views`(閲覧数)

これなら、商品ごとにタンスを一つ用意するだけで済む。整理整頓ができて、非常に効率的だ。

—

2. 数値を直接いじる魔法:HINCRBY

さて、本題の「数値演算」だ。
普通、プログラミングで「在庫を1減らす」処理をするときは、こんな手順を踏むよね。

1. 今の在庫を読み出す(10個だ!)
2. プログラムで1引く(10-1=9)
3. 新しい値を保存する(9個になった!)

でも、もしこの瞬間に別の誰かが同時に在庫を買おうとしたらどうなる? 読み書きのタイミングがズレて、在庫計算が狂ってしまうことがある。これが「競合」という悪夢だ。

ここで登場するのが `HINCRBY` だ。

商品ID 101 の stock(在庫)を -1 する
HINCRBY product:101 stock -1
結果:在庫が安全に1つ減る。これだけで完了!

`HINCRBY` は、「今の値を読み取って、計算して、書き込む」という一連の作業を、Redisの中で一瞬でやってのける。 外からは「一瞬で終わった」ようにしか見えない。だから、他の誰かが邪魔をすることはない。これが「アトミック(不可分)」の強さだ。

—

3. 小数点も怖くない:HINCRBYFLOAT

次は「売上管理」だ。売上は整数とは限らないよね。そんなときは `HINCRBYFLOAT` を使おう。

商品ID 101 の total_sales(売上合計)に 120.5 を足す
HINCRBYFLOAT product:101 total_sales 120.5
結果:売上が正確に加算される

これも使い方は同じ。小数点が含まれていても、Redisは正確に計算してくれる。

—

4. 今日から使える実践テクニック

まとめると、こんな風に活用できるよ。

| やりたいこと | コマンド例 |
| :— | :— |
| 初めての登録 | `HSET product:101 stock 10` |
| 在庫を増やす | `HINCRBY product:101 stock 5` |
| 在庫を減らす | `HINCRBY product:101 stock -1` |
| 売上に加算 | `HINCRBYFLOAT product:101 revenue 1500.50` |

先輩からのアドバイス

初心者のうちは、「計算はプログラム側(JavaやPythonなど)でやるもの」と考えがちだ。でも、Redisのような「データの近くで計算する」設計を覚えると、君が作るシステムは劇的に速く、そしてバグに強いものになる。

「データはRedisに任せて、計算もRedisに任せる」

これが、高負荷なシステムを支えるエンジニアの基本戦略だ。

ここをクリアすれば、Redisのハッシュはもう君の庭のようなもの。次は、このタンスの中身をどうやって取り出したり、監視したりするかを一緒に見ていこう。

焦らず、一歩ずつ進んでいこうね。君なら必ずマスターできるよ。

コメント

タイトルとURLをコピーしました