RedFony 3.4を使用してREDISとの対話



そして、Symfonyに関連したもう一つのブログ柱への歓迎😃
事実から始めましょう
大きなプロジェクトでは、頻繁に変化していないいくつかのデータがロードされた後ロードされる必要があります.ユーザー数とデータの数が増加すると、これはいくつかのパフォーマンスの問題を引き起こす可能性がありますエンドユーザーの迷惑です.
これらの状況では、最適化の多くのパスが利用可能です.
アプリケーションコードの最適化
データベースの最適化

我々がこのポストで集中するつもりであるキャッシュ.

キャッシュの方法はたくさんあります。


Webキャッシュ:
これは、クライアント側(すなわち:ブラウザキャッシュ)またはサーバー側で行うことができます定義された時間の応答のキャッシュから成ります.[ Details ]
データキャッシュ
データキャッシュは、データベースに戻って不要な繰り返しの旅行を避けることができる、データが頻繁に変更されていない場合、それは便利であり、アプリケーションは、同じデータをすべての時間の問い合わせです.MySQLとMariADBのようないくつかのデータベースは、プロセスをスピードアップするためのソリューションをキャッシュしている.
アプリケーションキャッシュ
このタイプのキャッシュは、プログラムが非常に遅いメソッドを使用している場合に便利です.アプリケーションキャッシュはスローメソッドの結果をどこかに格納することで構成され、処理時間を大幅に高速化する予定の要求に対して使用します.
キー値データキャッシュ
キャッシュのこの方法は、アプリケーションキャッシュと同じ概念に依存しますが、再起動またはサーバーの失敗時にデータを失うことはありません.
一般的なキー値データキャッシュデータベースの中で、REDISとmemcachedがあります.
このポストのタイトルで気づいたように、我々はRisfony😃.

プロジェクト設定


空白のsymfonyプロジェクトを作成します.
composer create-project symfony/framework-standard-edition RedisSymfony3 "3.4.*"
Redis束の追加
composer require snc/redis-bundle
バンドルをインストールした後に、バンドル配列にバンドルクラスを追加することで、それを有効にする必要がありますAppKernel クラス
$bundles = [
    ....
    new Snc\RedisBundle\SncRedisBundle(),
];
バンドルを有効にすると、少しの設定は、我々のアプリケーションからRedisと通信するために必要です.
そのためには、app/config/configに以下のコードを追加する必要があります.YMLファイル:
snc_redis:
        clients:
            default:
                type: phpredis
                alias: default
                dsn: redis://hostname # (*)
                logging: '%kernel.debug%'
(*)ホスト名はネットワーク内でアクセスできなければなりません.
我々はすべての今、我々は取得することができますredisでデータを格納設定されます.

Redisとのコミュニケーション


Redisバンドルをインストールすることで、Redisクライアントクラスへのアクセスを得ることができますSnc\RedisBundle\Client\Phpredis\Client これには様々なメソッドがあります.
すべてのRedisキーを取得する
REDISに格納されているすべてのキーを取得するには、引数として*キーメソッドを使用します.
サンプルコード:

<?php

namespace AppBundle\Controller;

use Snc\RedisBundle\Client\Phpredis\Client;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
    /** @var  Client */
    private $redisClient;

    public function __construct(Client $client)
    {
        $this->redisClient = $client;
    }

    /**
     * @Route("/keys", name="keys")
     */
    public function indexAction()
    {
        $redisKeys = $this->redisClient->keys('*');
        return $this->json(['keys' => $redisKeys]);
    }
}
Redisにおけるキー/値ペアの追加
新しいキー/値ペアを設定するには、setメソッドがあります.
set(key, value)
サンプルコード:
<?php

namespace AppBundle\Controller;

use Snc\RedisBundle\Client\Phpredis\Client;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
    /** @var  Client */
    private $redisClient;

    public function __construct(Client $client)
    {
        $this->redisClient = $client;
    }


    /**
     * @param $key
     * @param $value
     *
     * @Route("/create/{key}/{value}", name="create_key", methods={"GET"})
     * @return JsonResponse
     */
    public function createKeyAction($key, $value) {

        $this->redisClient->set($key, $value);
        return $this->json([
            "status" => Response::HTTP_OK
        ]);
    }
}
Redisからキー/値のペアを削除します.
キーを削除するには、引数としてキーを受け入れるdeleteメソッドがあります.
サンプルコード:
<?php

namespace AppBundle\Controller;

use Snc\RedisBundle\Client\Phpredis\Client;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
    /** @var  Client */
    private $redisClient;

    public function __construct(Client $client)
    {
        $this->redisClient = $client;
    }

    /**
     * @param $key
     * @Route("/delete/{key}", name="delete_key", methods={"GET"})
     *
     * @return JsonResponse
     */
    public function deleteKeyAction($key) {
        $this->redisClient->delete($key);
        return $this->json([
            "status" => Response::HTTP_OK
        ]);
    }
}
このようなパターンでキーのセットを削除する可能性もあります.
$this->redisClient->delete($this->redisClient->keys($key."*"));
サンプルコード:
<?php

namespace AppBundle\Controller;

use Snc\RedisBundle\Client\Phpredis\Client;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
    /** @var  Client */
    private $redisClient;

    public function __construct(Client $client)
    {
        $this->redisClient = $client;
    }

    /**
     * @param $key
     * @Route("/delete/like/{key}", name="delete_like_key", methods={"GET"})
     *
     * @return JsonResponse
     */
    public function deleteKeyLikeAction($key) {
        $this->redisClient->delete($this->redisClient->keys($key."*"));
        return $this->json([
            "status" => Response::HTTP_OK
        ]);
    }
}
それは、このポストのためだった、完全なコードが利用可能ですhere .
歓声😄