Schlagwort-Archive: yii

Yii memcached als Cache verwenden

Um Inhalte die sich seit dem letzten Zugriff nicht geändert haben, nicht immer wieder neu zu generieren oder aus der Datenbank zu holen, kann man Caching verwenden. Dafür gibt es verschiedene Möglichkeiten. Hier wird eine Cache im Hauptspeicher verwendet.

Umgesetzt wird der Cache von memcached (Nachfolger von memcache).

Nach der Installation, dem Konfigurieren und Starten des memcached geht man in Yii folgendermaßen vor:

Man ändert in der Konfiguration folgendes:

...
// Application components
'components' => array(
....
'cache'=>array(
'class'=>'system.caching.CMemCache',
'useMemcached' => true,
'servers'=>array(
		array('host'=>'localhost', 'port'=>11211, 'weight'=>60),
	),
				
),
'db' => array(
				'connectionString' => 'mysql:host=DEVELOPMENT_HOST;dbname=DEVELOPMENT_DB',
				'username' => 'USERNAME',
				'password' => 'PASSWORD',
				'enableParamLogging' => true,
                                'schemaCachingDuration'=>3600,
			),
...
),
...

Nun kann man den Cache verwenden.

Es bietet sich zum Beispiel an, das Schema der Datenbank zu cachen und nicht immer mit

show create table NAME;

dieses neu zu holen.
Siehe dafür in der Konfiguration oben ’schemaCachingDuration’=>3600.

Yii CTimestampBehavior nur create_time setzen

Damit in Yii beim Erstellen eines neuen Models die Zeit gespeichert wird, zu der dieses Model erstellt wurde, kann man CTimestampBehavior einsetzen:

...
public function behaviors(){
		return array(
			'timestamps' => array(
				'class' => 'zii.behaviors.CTimestampBehavior',
				'createAttribute' => 'create_time',
				'updateAttribute' => null,
			)
		);
	}
...

Falls das Model, wie hier, kein Attribut für die Zeit zu der das Model aktualisiert bzw. verändert wurde, hat, muss man ‚updateAttribute‘ auf null setzen, andernfalls werden Ausnahmen hervorgerufen.

Siehe auch http://www.yiiframework.com/doc/api/1.1/CTimestampBehavior

nginx (Apache- ) SetEnv Alternative

Man kann mit nginx zwar keine Umgebunsvarialbe direkt setzten, dafür kann man aber Parameter an FastCGI übergeben. So sind diese Werte beispielsweise für PHP verfügbar.

Um Beispielsweise für die Erweiterung yii-environment für das Yii Framework die Variable zu setzten geht man wie folgt vor:

...
location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  YII_ENVIRONMENT "development";
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
         }
...

Damit wird die Variable YII_ENVIRONMENT auf development gesetzt.

Diese kann in PHP dann folgendermaßen gelesen werden:

<?php
...
$mode = $_SERVER['YII_ENVIRONMENT'];
...
?>