Symfoware

Symfowareについての考察blog

Redis + FuelPHP 1.8でリストをソートして取得する(sort)

FuelPHPでRedisに接続してみました。
FuelPHP 1.8 Redisに接続してデータの登録、取得、削除
Redis + FuelPHP 1.8でリストの操作(rpush, lrange, ltrim)

今回は、登録したリスト形式のデータをソートして取得してみます。
Redis Command - SORT(指定したキーのリストをソート)


簡単なサンプル



文字列データを登録。
ソート済の状態で取得してみます。


  1. <?php
  2. namespace Fuel\Tasks;
  3. class Sample
  4. {
  5.     public static function run()
  6.     {
  7.         // redisに接続
  8.         $redis = \Redis_Db::forge();
  9.         
  10.         // 一旦クリア
  11.         $redis->del('key');
  12.         $values = [];
  13.         foreach(range(1, 20) as $i) {
  14.             $values[] = sprintf('%03d-value', $i);
  15.         }
  16.         // データの複数登録
  17.         $redis->rpush('key', ...$values);
  18.         // データの取得
  19.         $items = $redis->sort('key', 'alpha', 'desc');
  20.         foreach($items as $item) {
  21.             echo($item . PHP_EOL);
  22.         }
  23.         $redis->del('key');
  24.     }
  25. }



実行結果


$ oil r sample
020-value
019-value
018-value
017-value
016-value
015-value
014-value
013-value
012-value
011-value
010-value
009-value
008-value
007-value
006-value
005-value
004-value
003-value
002-value
001-value



文字列をソートする場合は「alpha」を指定する必要があります。




取得件数指定



「limit」でデータの取得件数を指定できます。


  1. <?php
  2. namespace Fuel\Tasks;
  3. class Sample
  4. {
  5.     public static function run()
  6.     {
  7.         // redisに接続
  8.         $redis = \Redis_Db::forge();
  9.         
  10.         // 一旦クリア
  11.         $redis->del('key');
  12.         $values = [];
  13.         foreach(range(1, 20) as $i) {
  14.             $values[] = sprintf('%03d-value', $i);
  15.         }
  16.         // データの複数登録
  17.         $redis->rpush('key', ...$values);
  18.         // データの取得
  19.         $items = $redis->sort('key', 'alpha', 'limit', 0, 10, 'desc');
  20.         foreach($items as $item) {
  21.             echo($item . PHP_EOL);
  22.         }
  23.         $redis->del('key');
  24.     }
  25. }



実行結果


$ oil r sample
020-value
019-value
018-value
017-value
016-value
015-value
014-value
013-value
012-value
011-value






store



コマンドの最後に「store [キー]」を指定すると、取得した結果が新しいキー名の値として設定されます。


  1. <?php
  2. namespace Fuel\Tasks;
  3. class Sample
  4. {
  5.     public static function run()
  6.     {
  7.         // redisに接続
  8.         $redis = \Redis_Db::forge();
  9.         
  10.         // 一旦クリア
  11.         $redis->del('key');
  12.         $redis->del('new_key');
  13.         $values = [];
  14.         foreach(range(1, 20) as $i) {
  15.             $values[] = sprintf('%03d-value', $i);
  16.         }
  17.         // データの複数登録
  18.         $redis->rpush('key', ...$values);
  19.         // ソート結果を「new_key」に保存
  20.         $redis->sort('key', 'alpha', 'limit', 0, 10, 'desc', 'store', 'new_key');
  21.         // データの取得
  22.         $items = $redis->lrange('new_key', 0, -1);
  23.         foreach($items as $item) {
  24.             echo($item . PHP_EOL);
  25.         }
  26.         $redis->del('key');
  27.         $redis->del('new_key');
  28.     }
  29. }



実行結果


$ oil r sample
020-value
019-value
018-value
017-value
016-value
015-value
014-value
013-value
012-value
011-value




キーは同じ名称を指定して上書きすることも可能です。


  1. <?php
  2. namespace Fuel\Tasks;
  3. class Sample
  4. {
  5.     public static function run()
  6.     {
  7.         // redisに接続
  8.         $redis = \Redis_Db::forge();
  9.         
  10.         // 一旦クリア
  11.         $redis->del('key');
  12.         $values = [];
  13.         foreach(range(1, 20) as $i) {
  14.             $values[] = sprintf('%03d-value', $i);
  15.         }
  16.         // データの複数登録
  17.         $redis->rpush('key', ...$values);
  18.         // ソート結果を「key」に保存
  19.         $redis->sort('key', 'alpha', 'limit', 0, 10, 'desc', 'store', 'key');
  20.         // データの取得
  21.         $items = $redis->lrange('key', 0, -1);
  22.         foreach($items as $item) {
  23.             echo($item . PHP_EOL);
  24.         }
  25.         $redis->del('key');
  26.     }
  27. }



実行結果


$ oil r sample
020-value
019-value
018-value
017-value
016-value
015-value
014-value
013-value
012-value
011-value





関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/06/26(火) 23:45:05|
  2. Redis
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<PHP クライアントに応答した後、http connectionを閉じて重い処理を継続する | ホーム | Redis + FuelPHP 1.8でリストの操作(rpush, lrange, ltrim)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://symfoware.blog.fc2.com/tb.php/2215-db743120
この記事にトラックバックする(FC2ブログユーザー)