在 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设置和验证缓存。

kobito.1417490506.497065.png

如果设置的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)
kobito.1417490801.144532.png

总结

我已经试过从安装Redis到在FuelPHP中操作方法。非常容易试用。特别是能无异样地使用,真的非常可靠。

在实际使用中,根据服务规模而定,可能会考虑使用AWS的ElasticCache(可在ElastiCache的Redis集群上添加备份和恢复功能)。

我希望能够高效设计和使用缓存, 以提升服务性能。

广告
将在 10 秒后关闭
bannerAds