1. 概要:
このシリーズの最初の数回のブログでは、主に String、List、Set、Hashes、Sorted-Set などの Redis データ型に関連するコマンドについて説明しました。これらのコマンドにはすべて、キーに関連付けられた値に対してすべての操作が実行されるという共通点があります。このブログでは、キー関連の Redis コマンドに焦点を当てます。これらのコマンドを学習することは、Redis を学習するための非常に重要な基礎であり、Redis の可能性を最大限に活用するための強力なツールでもあります。
このブログでは、いつものように、現在の学習と将来の参照を容易にするために、すべての関連コマンドの詳細なリストと典型的な例を示します。
2. 関連コマンドリスト:
コマンドプロトタイプ | 時間計算量 | コマンドの説明 | 戻り値 |
KEYSパターン | O(N) | 時間計算量のNはデータベース内のキーの数を表します。パターンパラメータに一致するすべてのキーを取得します。大規模なデータベースの場合、このコマンドは非常に時間がかかり、Redis サーバーのパフォーマンスに比較的大きな影響を与えるため、通常の操作ではこのコマンドを呼び出さないようにする必要があることに注意してください。パターンは glob スタイルのワイルドカード形式をサポートしています。たとえば、* は 1 つ以上の任意の文字を表し、? は任意の文字を表し、[abc] はパターンに一致する角括弧内の任意の文字を表します。 | |
O(N) | 時間計算量の N は、削除されたキーの数を表します。パラメータで指定したキーをデータベースから削除します。指定したキーが存在しない場合は無視されます。指定されたキーに関連付けられたデータ型が文字列型ではなく、リスト、セット、ハッシュ、ソートされたセットなどのコンテナー型である場合、各キーを削除するこのコマンドの時間計算量は O であることにも注意してください。 (M)。ここで、M はコンテナ内の要素の数を表します。文字列型 Key の場合、時間計算量は O(1) です。 | 削除されたキーの実際の数。 | |
O(1) | 指定されたキーが存在するかどうかを判定します。 | 1 は存在することを意味し、0 は存在しないことを意味します。 | |
O(1) | 現在のデータベースで指定されたキー Key をパラメータで指定されたデータベースに移動します。キーがターゲット データベースにすでに存在するか、現在のデータベースに存在しない場合、このコマンドは何も行わず 0 を返します。 | 移動が成功した場合は 1 を返し、それ以外の場合は 0 を返します。 | |
O(1) | パラメータ内の 2 つの Key コマンドが同じである場合、またはソース Key が存在しない場合、このコマンドは関連するエラー情報を返します。 newKey がすでに存在する場合は、直接上書きされます。 | ||
RENAMENX key newkey | O(1) | 新しい値が存在しない場合は、パラメータの元の値を新しい値に変更します。他の条件は RENAME と一致します。 | 1 は変更が成功したことを意味し、そうでない場合は 0 を意味します。 |
PERSIST key | O(1) | キーに有効期限がある場合、このコマンドはその有効期限を削除し、キーにタイムアウトがなく、永続的に保存できるようにします。 | 1 はキーの有効期限が削除されたことを意味し、0 はキーが存在しないか、有効期限がないことを意味します |
EXPIRE キーの秒数 | O(1) | このコマンドは、キーのタイムアウト秒数を設定しますパラメータで指定されたキーは、この時間を超えると自動的に削除されます。タイムアウトが発生する前にキーが変更された場合、キーに関連付けられたタイムアウトは削除されます。 | 1 はタイムアウトが設定されていることを意味し、0 はキーが存在しないか設定できないことを意味します。 |
EXPIREAT キーのタイムスタンプ | O(1) | このコマンドの論理機能は EXPIRE とまったく同じです。唯一の違いは、このコマンドで指定されるタイムアウトが相対時間ではなく絶対時間であることです。 time パラメータは Unix タイムスタンプ形式で、1970 年 1 月 1 日から経過した秒数を表します。 | 1 はタイムアウトが設定されていることを意味し、0 はキーが存在しないか設定できないことを意味します。 |
TTL キー | O(1) | キーの残りのタイムアウトの説明を取得します。 | 残りの説明を返すか、キーが存在しないかタイムアウトが設定されていない場合は -1 を返します。 |
RANDOMKEY | O(1) | 現在開いているデータベースからランダムなキーを返します。 | 返されるランダムキー、またはデータベースが空の場合は nil 。 |
TYPE key | O(1) | パラメータで指定されたキーに関連付けられた値のタイプを取得します。このコマンドは文字列形式で返します。 | 返される文字列はstring、list、set、hash、zsetです。キーが存在しない場合はnoneを返します |
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...] ] [ ASC|DESC] [ALPHA] [STORE 宛先] | O(N+M*log(M)) | このコマンドは比較的複雑なので、ここでは最も基本的な使用法のみを、興味のあるネチズンのために説明します。 redis の公式ドキュメントを参照できます。 | 元のソートされたリストを返します。 |
3. コマンド例:
1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX:
#在Shell命令行下启动Redis客户端工具。 /> redis-cli #清空当前选择的数据库,以便于对后面示例的理解。 redis 127.0.0.1:6379> flushdb OK #添加String类型的模拟数据。 redis 127.0.0.1:6379> set mykey 2 OK redis 127.0.0.1:6379> set mykey2 "hello" OK #添加Set类型的模拟数据。 redis 127.0.0.1:6379> sadd mysetkey 1 2 3 (integer) 3 #添加Hash类型的模拟数据。 redis 127.0.0.1:6379> hset mmtest username "stephen" (integer) 1 #根据参数中的模式,获取当前数据库中符合该模式的所有key,从输出可以看出,该命令在执行时并不区分与Key关联的Value类型。 redis 127.0.0.1:6379> keys my* 1) "mysetkey" 2) "mykey" 3) "mykey2" #删除了两个Keys。 redis 127.0.0.1:6379> del mykey mykey2 (integer) 2 #查看一下刚刚删除的Key是否还存在,从返回结果看,mykey确实已经删除了。 redis 127.0.0.1:6379> exists mykey (integer) 0 #查看一下没有删除的Key,以和上面的命令结果进行比较。 redis 127.0.0.1:6379> exists mysetkey (integer) 1 #将当前数据库中的mysetkey键移入到ID为1的数据库中,从结果可以看出已经移动成功。 redis 127.0.0.1:6379> move mysetkey 1 (integer) 1 #打开ID为1的数据库。 redis 127.0.0.1:6379> select 1 OK #查看一下刚刚移动过来的Key是否存在,从返回结果看已经存在了。 redis 127.0.0.1:6379[1]> exists mysetkey (integer) 1 #在重新打开ID为0的缺省数据库。 redis 127.0.0.1:6379[1]> select 0 OK #查看一下刚刚移走的Key是否已经不存在,从返回结果看已经移走。 redis 127.0.0.1:6379> exists mysetkey (integer) 0 #准备新的测试数据。 redis 127.0.0.1:6379> set mykey "hello" OK #将mykey改名为mykey1 redis 127.0.0.1:6379> rename mykey mykey1 OK #由于mykey已经被重新命名,再次获取将返回nil。 redis 127.0.0.1:6379> get mykey (nil) #通过新的键名获取。 redis 127.0.0.1:6379> get mykey1 "hello" #由于mykey已经不存在了,所以返回错误信息。 redis 127.0.0.1:6379> rename mykey mykey1 (error) ERR no such key #为renamenx准备测试key redis 127.0.0.1:6379> set oldkey "hello" OK redis 127.0.0.1:6379> set newkey "world" OK #由于newkey已经存在,因此该命令未能成功执行。 redis 127.0.0.1:6379> renamenx oldkey newkey (integer) 0 #查看newkey的值,发现它也没有被renamenx覆盖。 redis 127.0.0.1:6379> get newkey "world"
2. PERSIST/EXPIRE/EXPIREAT/TTL:
#为后面的示例准备的测试数据。 redis 127.0.0.1:6379> set mykey "hello" OK #将该键的超时设置为100秒。 redis 127.0.0.1:6379> expire mykey 100 (integer) 1 #通过ttl命令查看一下还剩下多少秒。 redis 127.0.0.1:6379> ttl mykey (integer) 97 #立刻执行persist命令,该存在超时的键变成持久化的键,即将该Key的超时去掉。 redis 127.0.0.1:6379> persist mykey (integer) 1 #ttl的返回值告诉我们,该键已经没有超时了。 redis 127.0.0.1:6379> ttl mykey (integer) -1 #为后面的expire命令准备数据。 redis 127.0.0.1:6379> del mykey (integer) 1 redis 127.0.0.1:6379> set mykey "hello" OK #设置该键的超时被100秒。 redis 127.0.0.1:6379> expire mykey 100 (integer) 1 #用ttl命令看一下当前还剩下多少秒,从结果中可以看出还剩下96秒。 redis 127.0.0.1:6379> ttl mykey (integer) 96 #重新更新该键的超时时间为20秒,从返回值可以看出该命令执行成功。 redis 127.0.0.1:6379> expire mykey 20 (integer) 1 #再用ttl确认一下,从结果中可以看出果然被更新了。 redis 127.0.0.1:6379> ttl mykey (integer) 17 #立刻更新该键的值,以使其超时无效。 redis 127.0.0.1:6379> set mykey "world" OK #从ttl的结果可以看出,在上一条修改该键的命令执行后,该键的超时也无效了。 redis 127.0.0.1:6379> ttl mykey (integer) -1
3. TYPE/RAN DOMKEY/ SORT :
#由于mm键在数据库中不存在,因此该命令返回none。 redis 127.0.0.1:6379> type mm none #mykey的值是字符串类型,因此返回string。 redis 127.0.0.1:6379> type mykey string #准备一个值是set类型的键。 redis 127.0.0.1:6379> sadd mysetkey 1 2 (integer) 2 #mysetkey的键是set,因此返回字符串set。 redis 127.0.0.1:6379> type mysetkey set #返回数据库中的任意键。 redis 127.0.0.1:6379> randomkey "oldkey" #清空当前打开的数据库。 redis 127.0.0.1:6379> flushdb OK #由于没有数据了,因此返回nil。 redis 127.0.0.1:6379> randomkey (nil)
以上が Redis チュートリアル (7): キー操作コマンドの詳細説明です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) をご覧ください。