使用Framework(特别是Laravel 4.1)根据'Region'进行缓存

时间:2013-12-16 12:46:00

标签: php caching laravel laravel-4

我目前正在修改我们当前在Drupal 6上运行的网站,我建议将其移至自定义CMS,我将使用Laravel 4.1编写。

我计划了大部分内容,其中一个我似乎无法理解的主要问题是区域缓存。

地区背景

我们针对不同的地区有不同的内容,我们在当前网站上做的是将一个GET变量附加到URL:example.tld / pageName /?region = 123

这很好,除了问题是缓存,我们当前的缓存系统很糟糕,即使使用它也很慢而且毫无意义(从数据库驱动开始)。我想将输出缓存到磁盘,这意味着我可以使用memcached或类似的东西(甚至是内置的Laravel缓存方法)。

我们正在缓存

目前,我们正在某些网页上缓存区域特定内容。例如:

Page 123 Region A

将有不同的内容

Page 123 Region B

我们根据区域缓存内容

所以我有两个主要问题:

  1. 存储/检索指定用户的区域ID的最佳方法是什么?
  2. 为指定区域ID存储/检索该页面/视图的关联数据的最佳方法是什么?
  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

  1. 我建议将区域ID存储在数据库中,然后在登录时将其捕获到会话中(假设您有登录系统)。如果您没有该用户的登录信息,请使用您当前使用的任何方法来捕获其区域。
  2. 正如别人推荐的那样,我建议使用复合键。我现在正在使用redis。 Cache :: put('Region:A:123',$ data)。
  3. 如果您将其区域存储在用户的会话中,则可以直接在控制器中捕获该区域,以便“自动”加载正确的区域数据。例如,

    登录页面

    Session::put('region', 'A');
    

    需要捕获区域特定数据的控制器

    $cached = Cache::get('Region:' . Session::get('region') . ':123);
    

    请注意,您可以通过多种方式在您的网站上执行缓存。请记住,使用Memcached / Redis意味着您将此数据存储在主内存中。因此,虽然速度非常快,但可能会少得多。我提出这个问题是因为你在帖子中提到“缓存到磁盘”然后提到了memcached。

    已编辑我的缓存:: put方法调用不正确。