Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存_PHP
Laravel 是我最近用得非常多而且越用就越喜欢的一款PHP框架,由于没有向下兼容的历史包袱,完全面向对象的风格,借助 Facades 优雅的IoC Container 实现,采用 Composer 进行包管理,可以方便地引入和使用开源社区里的优秀组件……总而言之,这是一款真正让你能够 "code happy" 的“巨匠级PHP开发框架”。
在尝试把自己的 Laravel App 部署到阿里云的时候,遇到了一个问题: Laravel 支持 Memcached 缓存,阿里云的 OCS 也是基于 Memcached 的缓存,但是阿里云 OCS 采用 SASL 认证,而 Laravel 的 Memcached 驱动并没有实现相关的方法,即使在服务器上编译PHP Memcached 的时候启用了 SASL 认证选项,也没办法设定用户名和密码。
在 Laravel 中,解决这样的问题,有很多方法。我选择了最快捷最省事的方法:扩展 Laravel 自己的 Memcached 驱动,通过 Memcached 对象自身的 setSaslAuthData 方法,指定用户名和密码。
背景知识
这是利用了 Illuminate\Cache\CacheManager 的 extend 方法(继承自Illuminate\Support\Manager)。先看一下这个方法的定义:
代码如下:
/**
* Register a custom driver creator Closure.
*
* @param string $driver
* @param Closure $callback
* @return \Illuminate\Support\Manager|static
*/
public function extend($driver, Closure $callback){}
这个方法接收两个参数,第一个是代表你自定义的驱动名称的字符串,第二个是一个闭包回调函数,这个函数就是当调用你的自定义驱动时要执行的方法。通过阅读 Illuminate\Cache\CacheManager 的源代码,我们可以发现创建驱动的函数要返回一个 Illuminate\Cache\Repository 的实例,Illuminate\Cache\Repository 的构造函数如下:
代码如下:
/**
* Create a new cache repository instance.
*
* @param \Illuminate\Cache\StoreInterface $store
*/
public function __construct(StoreInterface $store)
{
$this->store = $store;
}
它需要一个实现了 Illuminate\Cache\StoreInterface 接口的对象,这个接口中定义了 Cache 对象能够执行的方法。由于我计划是扩展原有的 Memcached 缓存驱动,在 Illuminate\Cache\CacheManager 的源代码中,可以看到 Laravel 是这样创建 Memcached 驱动的:
代码如下:
/**
* Create an instance of the Memcached cache driver.
*
* @return \Illuminate\Cache\MemcachedStore
*/
protected function createMemcachedDriver()
{
$servers = $this->app['config']['cache.memcached'];
$memcached = $this->app['memcached.connector']->connect($servers);
return $this->repository(new MemcachedStore($memcached, $this->getPrefix()));
}
它先从配置文件中读取你定义的 Memcached 服务器,然后创建一个 Memcached 对象(通过 Illuminate\Cache\MemcachedConnector 实现,实际上就是创建一个标准的 Memcached 对象,然后调用 Memcached 的 addServer 方法来指定要连接的服务器,然后返回实例化的 Memcached 对象。)
扩展自己的缓存驱动
了解了上述的背景知识之后,就可以来扩展自己的缓存驱动了。思路如下:
1.在 app/config/cache.php 文件中,增加三个配置项,用来设定“是否使用sasl认证”,“sasl认证账户”,“sasl认证密码”。
2.在 bootstrap/start.php 文件中,调用 Cache::extend 方法扩展驱动。
3.在 app/config/cache.php 文件中,修改 driver 配置项,指定系统使用自己扩展的驱动。
增加配置项
首先,打开 app/config/cache.php 文件,找到:
代码如下:
'memcached' => array(
array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),
),
修改为:
代码如下:
'memcached' => array(
array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),
),
'memcached_sasl' => 'true', // 启用sasl认证
'memcached_user' => 'your ocs username', // 你的 OCS 用户名
'memcached_pass' => 'your ocs password', // 你的 OCS 密码
扩展驱动
然后,打开 bootstrap/start.php 文件,在最后一行 return $app; 前面插入代码:
代码如下:
// 基于系统自己的 Memcached 缓存驱动,扩展一个名为 saslMemcached 的缓存驱动
Cache::extend('saslMemcached', function($app){
// 从配置文件中读取 Memcached 服务器配置
$servers = $app['config']['cache.memcached'];
// 利用 Illuminate\Cache\MemcachedConnector 类来创建新的 Memcached 对象
$memcached = $app['memcached.connector']->connect($servers);
// 如果服务器上的 PHP Memcached 扩展支持 SASL 认证
if(ini_get('memcached.use_sasl')){
// 从配置文件中读取 sasl 认证用户名
$user = $app['config']['cache.memcached_user'];
// 从配置文件中读取 sasl 认证密码
$pass = $app['config']['cache.memcached_pass'];
// 禁用 Memcached 压缩 (阿里云的文档里这样做了……)
$memcached->setOption(Memcached::OPT_COMPRESSION, false);
// 指定 Memcached 使用 binary protocol ( sasl 认证要求 )
$memcached->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
// 指定用于 sasl 认证的账号密码
$memcached->setSaslAuthData($user, $pass);
}
// 从配置文件中读取缓存前缀
$prefix = $app['config']['cache.prefix'];
// 创建 MemcachedStore 对象
$store = new \Illuminate\Cache\MemcachedStore($memcached, $prefix);
// 创建 Repository 对象,并返回
return new \Illuminate\Cache\Repository($store);
});
修改配置,使用自己扩展的缓存驱动
打开 app/config/cache.php 文件,找到:
代码如下:
"driver" => "file", // 默认是使用文件缓存
修改为:
代码如下:
"driver" => "saslMemcached", // 刚才扩展实现的驱动名称
现在,你就可以在你的 阿里云 ECS 服务器上, 让 Laravel 使用 阿里云 OCS 缓存服务了。(前提是你的 PHP 支持 Memcached 扩展,并且启用了 SASL 认证,参考:http://help.aliyun.com/doc/view/13553932.html

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Les opérations de base de données en PHP sont simplifiées à l'aide d'ORM, qui mappe les objets dans des bases de données relationnelles. EloquentORM dans Laravel vous permet d'interagir avec la base de données en utilisant une syntaxe orientée objet. Vous pouvez utiliser ORM en définissant des classes de modèle, en utilisant des méthodes Eloquent ou en créant un système de blog dans la pratique.

Analyse de l'outil de test unitaire PHP : PHPUnit : convient aux grands projets, fournit des fonctionnalités complètes et est facile à installer, mais peut être verbeux et lent. PHPUnitWrapper : adapté aux petits projets, facile à utiliser, optimisé pour Lumen/Laravel, mais a des fonctionnalités limitées, ne fournit pas d'analyse de couverture de code et dispose d'un support communautaire limité.

Les dernières versions de Laravel 9 et CodeIgniter 4 fournissent des fonctionnalités et des améliorations mises à jour. Laravel9 adopte l'architecture MVC et fournit des fonctions telles que la migration de bases de données, l'authentification et le moteur de modèles. CodeIgniter4 utilise l'architecture HMVC pour fournir le routage, l'ORM et la mise en cache. En termes de performances, le modèle de conception basé sur le fournisseur de services de Laravel9 et le framework léger de CodeIgniter4 lui confèrent d'excellentes performances. Dans les applications pratiques, Laravel9 convient aux projets complexes qui nécessitent de la flexibilité et des fonctions puissantes, tandis que CodeIgniter4 convient au développement rapide et aux petites applications.

Laravel - Artisan Commands - Laravel 5.7 est livré avec une nouvelle façon de traiter et de tester de nouvelles commandes. Il inclut une nouvelle fonctionnalité de test des commandes artisanales et la démonstration est mentionnée ci-dessous ?

Comparez les capacités de traitement des données de Laravel et CodeIgniter : ORM : Laravel utilise EloquentORM, qui fournit un mappage relationnel classe-objet, tandis que CodeIgniter utilise ActiveRecord pour représenter le modèle de base de données en tant que sous-classe de classes PHP. Générateur de requêtes : Laravel dispose d'une API de requêtes chaînées flexible, tandis que le générateur de requêtes de CodeIgniter est plus simple et basé sur des tableaux. Validation des données : Laravel fournit une classe Validator qui prend en charge les règles de validation personnalisées, tandis que CodeIgniter a moins de fonctions de validation intégrées et nécessite un codage manuel des règles personnalisées. Cas pratique : l'exemple d'enregistrement d'utilisateur montre Lar

Pour les débutants, CodeIgniter a une courbe d'apprentissage plus douce et moins de fonctionnalités, mais couvre les besoins de base. Laravel offre un ensemble de fonctionnalités plus large mais a une courbe d'apprentissage légèrement plus raide. En termes de performances, Laravel et CodeIgniter fonctionnent bien. Laravel dispose d'une documentation plus complète et d'un support communautaire actif, tandis que CodeIgniter est plus simple, léger et possède de solides fonctionnalités de sécurité. Dans le cas pratique de la création d'une application de blog, EloquentORM de Laravel simplifie la manipulation des données, tandis que CodeIgniter nécessite une configuration plus manuelle.

Lors du choix d'un framework pour de grands projets, Laravel et CodeIgniter ont chacun leurs propres avantages. Laravel est conçu pour les applications d'entreprise, offrant une conception modulaire, une injection de dépendances et un ensemble de fonctionnalités puissantes. CodeIgniter est un framework léger plus adapté aux projets de petite et moyenne taille, mettant l'accent sur la rapidité et la facilité d'utilisation. Pour les grands projets avec des exigences complexes et un grand nombre d'utilisateurs, la puissance et l'évolutivité de Laravel sont plus adaptées. Pour les projets simples ou les situations avec des ressources limitées, les capacités de développement légères et rapides de CodeIgniter sont plus idéales.

Guide des tests unitaires et d'intégration PHP Tests unitaires : concentrez-vous sur une seule unité de code ou de fonction et utilisez PHPUnit pour créer des classes de cas de test à des fins de vérification. Tests d'intégration : faites attention à la façon dont plusieurs unités de code fonctionnent ensemble et utilisez les méthodes setUp() et TearDown() de PHPUnit pour configurer et nettoyer l'environnement de test. Cas pratique : utilisez PHPUnit pour effectuer des tests unitaires et d'intégration dans les applications Laravel, notamment la création de bases de données, le démarrage de serveurs et l'écriture de code de test.
