yii2.0中redis的使用

本文介绍了在Yii2.0项目中如何集成并使用Redis作为缓存,包括通过composer安装Redis,配置项目连接Redis,缓存的使用示例,以及详细阐述了清除缓存的方法,如创建清除缓存的类、接口,并在后端操作时自动清除相关缓存。
摘要由CSDN通过智能技术生成

项目中添加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.创建清楚缓存的类

 <?php 
   namespace common\behaviors;

	use yii\base\Behavior;
	use yii\base\Event;
	use yii\db\ActiveRecord;
	use common\contracts\ShouldClearCache;
	
	/**
	 * 清空Redis缓存
	 * Class CacheClearBehaviors
	 * @package backend\Behaviors
	 */
	class CacheClearBehavior extends Behavior
	{
	    public function events()
	    {
	        return [
	            ActiveRecord::EVENT_AFTER_DELETE => '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.创建清除缓存的接口

<?php
	namespace common\contracts;

	// 需要清除缓存
	interface ShouldClearCache
	{
	    public function cacheKeys();
	}

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里面清除的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值