使用 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 不同,在尝试存储或获取值之前,不会有任何活动连接。
在缓存中,有三个重要的操作需要实现
- 存储数据: 将新数据添加到 memcached 服务器
- 获取数据: 从 memcached 服务器获取数据
- 删除数据: 从 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");
}