yii2.0でのredisの使用

3477 ワード

プロジェクトにredisキャッシュ1を追加します.composerインストールredis
      composer require "yiisoft/yii2-redis"

2.プロジェクトプロファイルの設定:cacheとリンクredisサーバcommon/config/mainを導入する.php:
          'components' => [
                'cache' => [
	               //  'class' => 'yii\caching\FileCache',
	                    'class' => \yii\redis\Cache::class,
	                    'redis' => 'redis'
               ],
       ]

common/config/main-local.php:redisサーバへのリンク
		   'redis' => [
		            'class' => 'yii\redis\Connection',
		            'hostname' => '10.110.XX.XX',//     
		            'port' => 6379,
		            'database' => 0,
		        ],

3.キャッシュの使用例
			    public static function getMenus($templateEnum)
			    {
			        return \Yii::$app->cache->getOrSet(YII_ENV.':templateMenu:'.$templateEnum, function () use ($templateEnum) {
			            $menus = TemplateMenu::find()->select(['menu_id', 'template_enum', 'sort'])
			                ->where(['template_enum' => $templateEnum])
			                ->orderBy('sort')
			                ->with('menu')
			                ->asArray()
			                ->all();
			            if (empty($menus)) {
			                throw new NotFoundHttpException('     ');
			            }
			            return get_tree($menus);
			        },3600 * 24);
			
			    }

4.キャッシュa.クリアキャッシュのクラスを作成する
  'clear',
	            ActiveRecord::EVENT_AFTER_INSERT => 'clear',
	            ActiveRecord::EVENT_AFTER_UPDATE => 'clear'
	        ];
	    }
	    /**
	     *     
	     * @param Event $event
	     */
	    public function clear(Event $event)
	    {
	        if ($event->sender instanceof ShouldClearCache) {
	            $keys = $event->sender->cacheKeys();
	            if (!is_array($keys)) {
	                $keys = [$keys];
	            }
	            if (!empty($keys)) {
	                foreach ($keys as $key) {
	                    \Yii::$app->cache->delete($key);
	                }
	            }
	        }
	    }	
	}

b.キャッシュをクリアするインタフェースの作成

c.バックエンド追加、編集、削除時にキャッシュをクリア
 :model      implements ShouldClearCach
	    public function cacheKeys()
	    {
	        return [
	            YII_ENV.':templateMenu:'.$this->template_enum,  //      
	        ];
	    }
	
	    public function behaviors()
	    {
	        return array_merge(parent::behaviors(), [
	            'class' => CacheClearBehavior::class,
	        ]);
	    }

注意:キャッシュがクリアできない場合は、まずキー名が同じかどうか、同じredisサーバに接続されているかどうか、このmodelでクリアされているかどうかを確認します.