新しいRedis 2.0およびRediska 0.5.0!

レディスカ 親愛なる友人! 先週、 Redisバージョン2.0の素晴らしいKey-Valueベースの安定したリリースがリリースされ、印象的な革新が行われました。 このニュースは、私たちが忙しいプロジェクトでRedisを使用して1年が経ち、私たちの印象は好意的であるため、特に私たちを喜ばせました。 Rediska PHPクライアントを更新し、新しい機能のサポートを追加しました。









Redis 2.0の主要な革新



トランザクション(MULTI / EXEC / DISCARD)


トランザクションを使用すると、一連の命令を単一のアトミック操作として実行できます。 ここに社会的な例があります:



最初のユーザーは、2番目のユーザーと友達になりたいという願望を表明します。
  1. 最初のユーザーIDを2番目のユーザーユーザーのセット( セットは一意の要素の順序付けられていないセット)に追加します:2:リクエストを保存するリクエスト。
2番目のユーザーは気にしません。
  1. ユーザーのセットから削除します:2:最初のユーザーのIDを要求します。
  2. 最初のユーザーIDをユーザーのセットに追加します:2: 2人目のユーザーの友達と友達。
  3. ユーザーのセットに2番目のユーザーIDを追加します。
操作の1つが失敗した場合、または競合する操作がある場合、崩壊は避けられません。 ここでは、トランザクションが助けになります。



<?php $rediska = new Rediska(); /* *         */ $rediska->addToSet('users:2:requests', 1); /* *     */ $rediska->transaction()->deleteFromSet('users:2:requests', 1) ->addToSet('users:2:friends', 1) ->addToSet('users:1:friends', 2) ->execute(); ?>
      
      





BLPOP / BRPOPブロッキング操作


アトミック操作BLPOPおよびBRPOPは、リストの最初または最後のアイテムを取得および削除します(リストはアイテムの順序付きリストです)。 さらに、リストが空の場合、別のクライアントがそこにアイテムを置くまで、操作はクライアントの接続をブロックします。



たとえば、ユーザーはBritneyのmp3トラックを320 Kb / sにアップロードします。 192 Kb / sに変換する必要があります。 これを行うには、変換タスクをキューに追加します。 デーモンはキューからタスクを受け取り、ファイルを変換します。 キューを実装するには、リストが優れています。



 <?php $rediska = new Rediska(); //      $queue = new Rediska_Key_List('queue'); $queue[] = 'britney_spears__and_then_we_kiss.mp3'; //    while(true) { //      //   ,           $file = $queue->popBlocking(); convertFile($file); } ?>
      
      





公開/購読


最も注目すべき革新の1つは、 Publish / Subscribeメッセージキューパラダイムの実装です。 PUBLISH操作は、特定の受信者ではなくチャネルにメッセージを追加し、それらについては何も知りません。 SUBSCRIBE操作は、1つまたは複数のチャネルをサブスクライブし、メッセージを受信します。



頭に浮かぶ最も簡単な例は、チャットの実装です(ただし、パブリッシュ/サブスクライブにはもっと便利な用途があります)。



 <?php $rediska = new Rediska(); //        //     timeout   foreach($rediska->subscribe('main') as $nickAndMessage) { list($nick, $message) = $nickAndMessage; print "$nick: $message"; } ?>
      
      



 <?php $rediska = new Rediska(); //       $rediska->publish('main', array('', ' -   !')); ?>
      
      





実装のイニシアチブと支援に対してジュラオクターブに 感謝します!



新しいハッシュキータイプ


ハッシュは、値が基本的にPHPの連想配列であるキーですが、文字列キーにシリアル化された配列を保存するのとは異なり、フィールドとその値を操作するためのアトミック操作を提供します。



ハッシュでは、オブジェクトを保存したり、文字列キーをグループ化してより効率的に使用したりすることが非常に便利です。



 <?php $rediska = new Rediska(); class User extends Rediska_Key_Hash { public function __construct($id) { parent::__construct("users:$id"); } } //    $user = new User(1); $user->id = 1; $user['name'] = ''; //         $user->friendsCount = 0; //    $user = new User(1); $user->increment('friendsCount'); //    foreach($user as $field => $value) { print "$field => $value"; } ?>
      
      





仮想メモリ


仮想メモリは、RAMのサイズが許容するよりも多くのデータをRedisに保存するのに役立ちます。 つまり、Redisは、RAMからディスクにアクセスする可能性が最も高いキーの値を消去します。



仮想メモリは、使用するキーの割合が少ない場合や、キーの値が大きい場合に効果的です。



Redisサーバーの構成


新しいCONFIG操作を使用すると、Redisサーバー構成を読み取って変更できます。



 <?php $rediska = new Rediska(); //    $config = $rediska->config(); //   print $config->maxmemory; //         print $config['maxmemory']; //   $config->maxmemory = 10000; //      (glob) foreach($config['max*'] as $name => $value) { print "$name => $value\n"; } //     foreach($config as $name => $value) { print "$name => $value\n"; } ?>
      
      





新しい文字列キー操作


 <?php $rediska = new Rediska(); //     'value' $rediska->set('key', 'value'); //   '-shmalue'   $rediska->append('key', '-shmalue'); //    print $rediska->substring('key', 6); #=> malue // ""  set + expire $rediska->setAndExpire('key', 'value', 60 * 5); ?>
      
      





新しい大根からの何か



インスタンスマネージャー


アプリケーションには、異なるオプション(名前空間、サーバーなど)を持つ大根の異なるインスタンスを必要とするコンポーネント(キャッシュ、セッションなど)がある場合があります。

マネージャークラスはこれらのインスタンスの格納にコミットしており、それらを取得、追加、削除するためのメソッドを提供します。

マネージャは、オブジェクトに加えて大根オプションの配列を保存し、最初のリクエスト時にオブジェクトを作成することもできます(遅延ロード)。



 <?php //  'default'  $rediska = new Rediska(); //  'default'    $rediska = Rediska_Manager::get(); print $rediska->getName(); #=> default //  'cache'  $rediska = new Rediska(array('name' => 'cache', 'namespace' => 'Cache_')); //  'cache'    $rediska = Rediska_Manager::get('cache'); print $rediska->getName(); #=> cache //   'sessions'  Rediska_Manager::add(array('name' => 'sessions', 'namespace' => 'Sessions_')); //        $rediska = Rediska_Manager::get('sessions'); print $rediska->getName(); #=> sessions ?>
      
      





新しいシリアライザー


新しいバージョンでは、Radishは配列とオブジェクトのみをシリアル化し 、文字列と数値はそのまま保存されます(以前のバージョンで保存されたデータには問題はありません)。



serializerAdapterオプションを使用して、 シリアル化方法を指定できます。
オートローダー


大根はrequire_onceを取り除き、パスをinclude_pathに追加する必要がありました。



操作モニター


MONITOR操作が実装 、Redisサーバーで実行された操作をリアルタイムで観察できるようになりました。



 <?php $rediska = new Rediska(); //         $monitor = $rediska->monitor(60 * 2); //      Redis  $monitor = $rediska->on('server1')->monitor(); //   foreach($monitor as $timestamp => $command) { print "$timestamp => $command"; } ?>
      
      





結論として...


オーバーロードしないようにします。C++で大根をPHP拡張機能として書き直し始めただけで、喜んで参加します。



All Articles