set
SET
Redis 開発者教育の申込
|
Redis 定期点検/技術サポートRedis Technical Support |
Redis エンタープライズサーバーRedis Enterprise Server |
|---|
保存
set はデータを保存するコマンドです。使い方は set key value です。
get は保存したデータを取得するコマンドです。
Example
| コマンド> | set key value |
| 結果> | OK |
| コマンド> | get key |
| 結果> | value |
二重引用符の使用
value 部分で空白を入れるときは二重引用符を使います。
Example
| コマンド> | set key "Hello Redis!" |
| 結果> | OK |
| コマンド> | get key |
| 結果> | Hello Redis! |
上書き
同じ key で SET コマンドを実行すると、以前の value は消えて新しく入力した value が残ります。
![]() |
上書きしないようにするには NX オプションを使います。 NX, XX, EX, PX オプションは version 2.6.12 で追加されました。 |
|---|
上書き防止: NX
NX オプションを使うと、データベースに同じキーがない場合にだけ保存されます。
NX オプションはロック(lock)処理によく使います。
単一コマンドでデータの有無を確認して保存までできるからです。
Example
| コマンド> | set key1 Hello NX |
| 結果> | OK |
| コマンド> | set key1 Redis NX |
| 結果> | (nil) |
| コマンド> | get key1 |
| 結果> | Hello |
| NX オプションは大文字・小文字を区別せずに使えます。 最初のコマンドはデータベースに key1 がないので、データは正常に保存されました。 2 番目のコマンドは最初のコマンドで key1 が保存されているので (nil) を返します。 このオプションは SETNX コマンドと同じ動作をします。 |
データベースにすでにキーがある場合にだけ保存: XX
XX オプションは、指定したキーがすでにデータベースにある場合にだけ保存されます。
Example
| コマンド> | set key2 Hello XX |
| 結果> | (nil) |
| コマンド> | set key2 Hello |
| 結果> | OK |
| コマンド> | set key2 Redis XX |
| 結果> | OK |
| コマンド> | get key2 |
| 結果> | Redis |
| Redis のすべてのオプションは大文字・小文字を区別せずに使えます。 XX オプションを使った最初のコマンドはデータベースに key2 がないので、データは保存されません。 2 番目は XX オプションを使っていないので保存されます。 3 番目はデータベースに key2 があるので正常に保存されます。 |
指定した時間のあとでデータが消える: EX <秒単位で指定>
EX 秒(second) オプションは、指定した秒のあとでデータが消えます。
有効期限付きのデータを保存するときに便利です。
Example
| コマンド> | set key3 Hello EX 5 |
| 結果> | OK |
| コマンド> | get key3 1秒後 |
| 結果> | Hello |
| コマンド> | get key3 5秒後 |
| 結果> | (nil) |
| このオプションは SETEX コマンドと同じ動作をします。 |
指定した時間のあとでデータが消える: PX <1/1000秒単位で指定>
PX ミリ秒(millisecond) オプションは、指定したミリ秒のあとでデータが消えます。
細かい有効期限を指定するときに使います。
Example
| コマンド> | set key3 Hello PX 5000 |
| 結果> | OK |
| コマンド> | get key3 1秒後 |
| 結果> | Hello |
| コマンド> | get key3 5秒後 |
| 結果> | (nil) |
| このオプションは PSETEX コマンドと同じ動作をします。 |
指定した時刻(timestamp,秒)のあとでデータが消える: EXAT <timestamp>
EXAT 時刻(timestamp,秒) オプションは、指定した時刻のあとでデータが消えます。
有効期限付きのデータを保存するときに便利です。
Redis 6.2 で追加されました。
指定した時刻(milliseconds-timestamp,ミリ秒)のあとでデータが消える: PXAT <milliseconds-timestamp>
PXAT 時刻(milliseconds-timestamp,ミリ秒) オプションは、指定した時刻のあとでデータが消えます。
有効期限付きのデータを保存するときに便利です。
Redis 6.2 で追加されました。
有効期限(expire time)を維持: KEEPTTL
SET コマンドは既定で有効期限(expire time)を消します。
KEEPTTL オプションを使うと有効期限を消しません。
このオプションは、次のような特別な場合に使うために作りました。
INCRBYFLOAT コマンドが実行されると AOF には SET コマンドに変わって記録され、
以前に有効期限が設定されていた場合は消えます。
このような場合に KEEPTTL オプションを使って有効期限が消えないようにします。
Example
| コマンド> | set key4 10 ex 100
AOF: SET key4 10, PEXPIREAT key4 1579954223443 |
| 結果> | OK |
| コマンド> | incrbyfloat key4 10 AOF: SET key 20 KEEPTTL |
| 結果> | 20 |
| コマンド> | SHUTDOWN -> RESTART |
| コマンド> | ttl key4 restart 後も expire time が維持される。 |
| 結果> | 25 |
|
6.0-r1 では INCRBYFLOAT を SET KEEPTTL に変更する部分はできていますが、
コマンドを実際に記録する aof.c feedAppendOnlyFile() で SET コマンドを処理する部分が
修正されていないため、KEEPTTL が AOF に記録されません。
SET key value KEEPTTL コマンドも AOF には SET key value だけが記録されます。 この問題は 6.0.5(2020年6月9日発表)で解決されました。 |
新しい値を入れて既存の値を取得: GET
このオプションは 6.2 で追加されました。
これからは既存の GETSET コマンドではなく、このオプションの使用をおすすめします。
Example
| コマンド> | set key1 value1 |
| 結果> | OK |
| コマンド> | set key1 value2 get |
| 結果> | value1 |
| コマンド> | get key1 |
| 結果> | value2 |
構文
SET key value [NX|XX] [EX seconds] [PX milliseconds] [EXAT timestamp] [PXAT milliseconds-timestamp] [KEEPTTL] [GET]
- このコマンドは version 1.0.0 から使用できます。
- NX, XX, EX, PX オプションは version 2.6.12 で追加されました。
- KEEPTTL オプションは version 6.0 で追加されました。
- EXAT, PXAT, GET オプションは version 6.2 で追加されました。
- 時間計算量は O(1) です。
| SQL Insert | Redis Enterprise 7.3.0 以上なら INSERT を使ってみてください。 |
| 関連コマンド | SETNX, SETEX, PSETEX, TTL, PTTL, MSET, APPEND |
| Clients for Java | Jedis, Lettuce, Redisson | Clients for C | Hiredis |
| << STRINGS | SET | SETS >> |
|---|

