在 FuelPHP 中使用 Vagrant 安装 Redis 并利用缓存
之前,我在FuelPHP中完成了对Welcome页面的引用。这一次,我想尝试使用Redis来实现缓存机制,虽然很基础,但我在MacBookAir的Vagrant环境中进行了验证。
建立环境
-
- OSX 10.9.5
-
- Vagrant
-
- CentOS 6.5
-
- FuelPHP 1.7.2
-
- Redis server 2.4.10
- Redis-cli 2.4.10
参考:之前的一次
在上次设置好的环境基础上,正在 macOS 上使用 Vagrant 将 FuelPHP 配置在 CentOS 上。
参考:Redis 相关
在 CentOS-6.5 上安装和操作 Redis 参考了以下内容:
搭建redis服务器
FuelPHP 的缓存库 – 使用 Redis 的版本
请参考日本语FuelPHP文档。
缓存
Redis
首先安装 Redis
由于是在Vagrant中的命令,所以将所有命令行表示为[vagrant]。
[vagrant] yum –enablerepo=epel install redis
…
…
安装完成!
Redis服务器已经安装完毕,没有任何问题。
现在,我们开始启动Redis服务器。
[vagrant] /etc/init.d/redis start
Starting redis-server: [ OK ]
接下来我们来确认版本。首先是服务器的版本。
[vagrant] redis-server -v
Redis server version 2.4.10 (00000000:0)
下一步是客户端版本。
[vagrant] redis-cli -v
redis-cli 2.4.10
接下来将进行操作验证。启动客户端并进行简单验证。
[vagrant] redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> set hoge 'foo'
OK
redis 127.0.0.1:6379> get hoge
"foo"
由于可以获取到所设置的数据,似乎没有问题。
暂时将所有设置的数据清除。
[vagrant] redis-cli
redis 127.0.0.1:6379> flushall
OK
redis 127.0.0.1:6379> get hoge
(nil)
完成了清除。
准备 FuelPHP
我将准备以下文件。
-
- Controller
app/classes/controller/redis.php
View
app/views/cache/redis.php
使用するClass
app/classes/object.php
<?php
class Controller_Redis extends \Fuel\Core\Controller
{
public function action_index()
{
// string
Cache::set('string', 'cache test' . Date::time());
$data['string'] = Cache::get('string');
// Array
$arr = array(
1,
2,
array(
'key' => 'value',
'key2' => 'value2',
'time' => Date::time(),
)
);
Cache::set('array', $arr);
$data['array'] = Cache::get('array');
// Object
$obj = new Object();
Cache::set('object', $obj);
$data['object'] = Cache::get('object');
return Response::forge(View::forge('cache/redis', $data));
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Cache: Redis</title>
</head>
<body>
<p>Cache: Redis</p>
<div>String:<?php var_export($string) ?></div>
<div>Array :<?php var_export($array) ?></div>
<div>Class :<?php var_export($object) ?></div>
</body>
</html>
<?php
class Object
{
public static function _init()
{
}
public function __toString()
{
return 'Object';
}
}
准备工作已经做好了。
使用FuelPHP设置和验证缓存。
如果设置的String、Array和Object都能显示出来,那就表示成功。
清空 Redis 的缓存并只引用缓存。
让我们来看一下无法访问缓存的情况。请准备以下文件。
-
- Controller
app/classes/controller/redis2.php
<?php
class Controller_Redis2 extends \Fuel\Core\Controller
{
public function action_index()
{
try{
$data['string'] = Cache::get('string');
}
catch (\CacheNotFoundException $e) {
$data['string'] = 'none string';
}
try{
$data['array'] = Cache::get('array');
}
catch (\CacheNotFoundException $e) {
$data['array'] = 'none array';
}
try{
$data['object'] = Cache::get('object');
}
catch (\CacheNotFoundException $e) {
$data['object'] = 'none object';
}
return Response::forge(View::forge('cache/redis', $data));
}
}
如果无法获取到缓存,则会引发CacheNotFoundException异常,因此我们在这里添加处理逻辑。
在这种状态下,当访问http://192.168.33.01/redis2时,应该会显示与先前相同的结果。
在这里,先试着清空一下Redis的内容。
[vagrant] redis-cli
redis 127.0.0.1:6379> flushall
OK
redis 127.0.0.1:6379> get hoge
(nil)
总结
我已经试过从安装Redis到在FuelPHP中操作方法。非常容易试用。特别是能无异样地使用,真的非常可靠。
在实际使用中,根据服务规模而定,可能会考虑使用AWS的ElasticCache(可在ElastiCache的Redis集群上添加备份和恢复功能)。
我希望能够高效设计和使用缓存, 以提升服务性能。