新しい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拡張機能として書き直し始めただけで、喜んで参加します。

Source: https://habr.com/ru/post/J103823/


All Articles