gpt4 book ai didi

php - 这是在 PHP 中缓存数据的好方法吗?

转载 作者:可可西里 更新时间:2023-10-31 23:23:57 26 4
gpt4 key购买 nike

我找到了一种缓存数据的方法(这样我就不必在之前已经获取过相同的数据时重新访问数据库),我通过在函数中使用静态变量来实现:

function get_user( $id, $flush=false ){
static $cache;
if ( isset($cache[$id]) && !$flush )
return $cache[$id];
// Do something here to get user information
$user_info = $value;
// Return value after storing data into cache
return $cache[$id] = $user_info;
}

我不太确定这是个好主意还是有更好的缓存方法。这是一个好方法吗?如果不是,那么缺点是什么?

最佳答案

从某种意义上说,您的代码是一个很好的起点(或多或少——array_key_exists 比此处的 isset 更好,而且您没有显式初始化数组)。

随着您改进代码并开始需要缓存层的更多功能,这种简单方法的缺点将开始变得明显。一系列问题将源于这样一个事实,即无法在 get_user 函数之外访问您的后备存储。将缓存实用程序打包到一个类中会好得多,这样您以后可以进行多个修改后备存储的操作。在其最基本的形式中,这看起来像

class Cache {
private $store = array();

public function get($key, $flush = false) {
// implementation
}
}

进一步的改进是抽象你的后备存储(例如,到一个 ICacheBackingStore 接口(interface)),这样你就可以动态地插入和配置你的缓存的后备存储(这里有很多选项——存储在数据库、序列化文件、 session 、内存缓存或类似文件中)。例如:

interface ICacheBackingStore {
function exists($key);
function get($key);
function set($key, $value);
function purge($key);

function getAllKeys();
}

class ArrayBackingStore implements ICacheBackingStore {
private $store = array();

public function exists($key) {
return array_key_exists($this->store, $key);
}

// etc
}

class Cache {
// you can now change/configure how the cache works through one line of code
private $store = new ArrayBackingStore;

public function set($key) {
return $store->get($key);
}
}

关于php - 这是在 PHP 中缓存数据的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9992355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com