Redis CLI
Redis コマンドラインインターフェース(CLI)のよく使うコマンドリファレンス。
基本操作
サーバー接続
redis-cli -h [host] -p [port]サービス管理
sudo service redis-server [status | start | stop]バージョン確認
redis-server -vTTL(有効期限)
ttl [key]データ管理
KEYS
- 完了までブロック
- 本番環境での使用禁止
- デバッグ専用
SCAN
- cursor を使った反復処理
- slot reference を返す
- 各呼び出しで 0 個以上の keys を返す可能性
- 本番環境で安全
FLUSHDB / FLUSHALL
現在のデータベースのすべての keys を削除:
flushdbすべてのデータベースのすべての keys を削除:
flushallINCRBY
SET mykey "10"
INCRBY mykey 5
GET mykey
# 15データ構造
Hash
時間計算量:
- O(1):
HGET,HSET,HINCRBY,HDEL - O(n):
HGETALL
HSET user:123 username martina firstName Martina lastName Elisa country GB
HGET user:123 username
HGETALL user:123ゲームキャラクターの例:
HSET player:42 name Artexious race Elf level 4 hp 20 gold 20
HGETALL player:42
HSET player:42 status dazed
HDEL player:42 status
HINCRBY player:42 gold 120List
すべての要素を取得:
LRANGE media_server_list 0 -1String
有効期限付きの値を設定:
SET ticket:27 "{'username': 'priya', 'ticket_id': 321}" EX 100モジュール管理
読み込まれたモジュールを一覧表示:
MODULE LISTモジュール情報を表示:
INFO MODULESトランザクション
データベーストランザクションの理論的基礎については、Transaction Issues を参照してください。
| コマンド | 説明 |
|---|---|
MULTI | トランザクション開始 |
EXEC | キューに入れたすべてのコマンドを実行 |
DISCARD | トランザクションをキャンセル |
WATCH | key を監視、変更されるとトランザクション失敗 |
RedisJSON
RedisJSON モジュールにより、Redis で JSON ドキュメントの保存と操作がネイティブにサポートされます。
基本操作
| 目標 | 説明 |
|---|---|
| JSON を挿入 | JSON.SET |
| JSON を取得 | JSON.GET |
| JSON を変更 | JSON.SET(パスを指定) |
例:Food Truck データ
JSON.SET vendor:96 $ '{"name": "Tacos Mi Ranchos", "phone": 557891234, "accepts_online_orders": false, "currently_open": true, "menu": [{"name": "burrito", "price": 11.5}, {"name": "taco", "price": 3.5}, {"name": "quesadilla", "price": 6.0}]}'ネストされたプロパティの更新
JSON.SET vendor:96 $.location '{"address": "1434 1st Ave, Oakland, CA 94606", "coordinates": [37.7989708, -122.2565053]}'データ取得
# ドキュメント全体を取得
JSON.GET vendor:96
# menu 配列を取得
JSON.GET vendor:96 $.menu
# 最初のアイテムの価格を取得
JSON.GET vendor:96 $.menu[0].price配列操作
配列に要素を追加:
JSON.ARRAPPEND vendor:96 $.menu '{"name": "Torta", "price": 4.5}'配列から要素を削除:
JSON.ARRPOP vendor:96 $.menu 0数値操作
JSON.NUMINCRBY vendor:96 $.wait-time 10Redis Stack Server
RedisJSON を使用した関連データモデル:
classDiagram
direction LR
class vendor{
-name
-cuisines
-primary_cuisine
-address
}
class event{
-assigned_vendors
-start_time
-end_time
-location_id
}
class location{
- address
}
class address{
-coordinates
}
class coordinates{
-longitude
-latitude
}
vendor <--> event
vendor <--> location
データ構造例
{
"banner_url": "https://media-cdn.truckfinder.com/.../photo0jpg.jpg",
"cuisines": ["Mexican"],
"events": [],
"id": "0013i00001w89pHAZQ",
"logo_url": "https://s3-media0.f1.truckfinder.com/.../o.jpg",
"name": "Tacos Mi Rancho",
"primary_cuisine": "",
"vendor_info": {
"address": "1434 1st Ave",
"city": "Oakland",
"state": "CA"
}
}{
"id": "0016e00002o8jJGAAY",
"about": "Food trucks that provides a variety of cuisines...",
"image_url": "https://truckfinder.s3.amazonaws.com/locations/...",
"info": {
"address": "SFO Terminal 1",
"city": "San Francisco",
"coordinates": "-122.3943, 37.6227",
"region": "San Francisco",
"state": "CA",
"zipcode": "94128"
},
"location_type": "Public Market",
"name": "Off The Grid: SFO Food Spot"
}{
"assigned_vendors": 8,
"id": "a1M6e000006oioXEAQ",
"location_id": "",
"location_name": "Off The Grid: SFO Food Spot",
"name": "SFO",
"start_time": "2022-07-14T20:30:00-07:00",
"end_time": "2022-07-14T14:00:00-07:00"
}JSON.SET 例
Vendor:
JSON.SET truck:42 $ '{"banner_url": "https://...", "cuisines": ["Mexican"], "events": [], "id": "0013i00001w89pHAZQ", "logo_url": "https://...", "name": "Tacos Mi Rancho", "primary_cuisine": "", "vendor_info": {"address": "1434 1st Ave", "city": "Oakland", "state": "CA"}}'Location:
JSON.SET location:23 $ '{"id": "0016e00002o8jJGAAY", "about": "Food trucks...", "image_url": "https://...", "info": {"address": "SFO Terminal 1", "city": "San Francisco", "coordinates": "-122.3943, 37.6227", "region": "San Francisco", "state": "CA", "zipcode": "94128"}, "location_type": "Public Market", "name": "Off The Grid: SFO Food Spot"}'Event:
JSON.SET event:11 $ '{"assigned_vendors": 8, "id": "a1M6e000006oioXEAQ", "location_id": "", "location_name": "Off The Grid: SFO Food Spot", "name": "SFO", "start_time": "2022-07-14T20:30:00-07:00", "end_time": "2022-07-14T14:00:00-07:00"}'関連データ
event を vendor の events 配列に追加:
JSON.ARRAPPEND truck:42 $.events '"a1M6e000006oioXEAQ"'event の location_id を設定:
JSON.SET event:11 $.location_id '"0016e00002o8jJGAAY"'RedisSearch
RedisSearch モジュールは全文検索とセカンダリインデックス機能を提供します。
インデックス作成
FT.CREATE idx:truck
ON JSON
PREFIX 1 "truck:"
SCHEMA
$.name AS name TEXT SORTABLE
$.cuisines[*] AS cuisines TAG検索
名前で検索:
FT.SEARCH idx:truck @name:Tacos
FT.SEARCH idx:truck '@name:Tacos Mi'Tag で検索:
FT.SEARCH idx:truck '@cuisines:{Mexican}'Event インデックス例
インデックス作成:
FT.CREATE idx:event
ON JSON
PREFIX 1 "event:"
SCHEMA
$.assigned_vendors AS assigned_vendors NUMERIC SORTABLE
$.name AS name TEXT SORTABLE
$.location_name AS location TEXT数値範囲検索:
FT.SEARCH idx:event '@assigned_vendors:[5 inf]'