使用 memcache 缓存

Memcache 是​​一个分布式对象缓存系统,使用 key-value 存储小数据。在开始将 Memcache 代码调用到 PHP 之前,你需要确保它已安装。这可以在 php 中使用 class_exists 方法完成。验证模块已安装后,首先要连接到 memcache 服务器实例。

if (class_exists('Memcache')) {
  $cache = new Memcache();
  $cache->connect('localhost',11211);
}else {
  print "Not connected to cache server";
}

这将验证是否安装了 Memcache php-drivers 并连接到 localhost 上运行的 memcache 服务器实例。

Memcache 作为守护进程运行,称为 memcached

在上面的示例中,我们只连接到单个实例,但你也可以使用连接到多个服务器

if (class_exists('Memcache')) {
  $cache = new Memcache();
  $cache->addServer('192.168.0.100',11211);
  $cache->addServer('192.168.0.101',11211);
}

请注意,在这种情况下,与 connect 不同,在尝试存储或获取值之前,不会有任何活动连接。

在缓存中,有三个重要的操作需要实现

  1. 存储数据: 将新数据添加到 memcached 服务器
  2. 获取数据: 从 memcached 服务器获取数据
  3. 删除数据: 从 memcached 服务器删除已存在的数据

存储数据

$cache 或 memcached 类对象有一个 set 方法,它接受一个键,值和时间来保存(ttl)的值。

$cache->set($key, $value, 0, $ttl);

这里$ ttl 或生存时间是指你希望 memcache 在服务器上存储该对的时间(以秒为单位)。

获取数据

$cache 或 memcached 类对象有一个 get 方法,它接受一个键并返回相应的值。

$value = $cache->get($key);

如果没有为键设置值,它将返回 null

删除数据

有时你可能需要删除一些缓存值 .$cache 或 memcache 实例有一个 delete 方法可以用于相同的。

$cache->delete($key);

缓存的小方案

让我们假设一个简单的博客。它将在登录页面上有多个帖子,每个页面加载时都会从数据库中获取。为了减少 sql 查询,我们可以使用 memcached 来缓存帖子。这是一个非常小的实现

if (class_exists('Memcache')) {
  $cache = new Memcache();
  $cache->connect('localhost',11211);
    if(($data = $cache->get('posts')) != null) {
      // Cache hit
      // Render from cache
    } else {
      // Cache miss
      // Query database and save results to database
      // Assuming $posts is array of posts retrieved from database
      $cache->set('posts', $posts,0,$ttl);
    }
}else {
  die("Error while connecting to cache server");
}