RedFony 3.4を使用してREDISとの対話
6570 ワード
そして、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 .歓声😄
Reference
この問題について(RedFony 3.4を使用してREDISとの対話), 我々は、より多くの情報をここで見つけました https://dev.to/aelamel/interacting-with-redis-using-symfony-5802テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol