&引用;“缓存”;php中的数据库值数组(2个选项,哪个更好?)
(我在下面使用var这个词,因为我不确定它是什么,我认为它是类的全局变量) 我想缓存从数据库中的表中获取的值,以保存重复的查询。 我所做的是创建一个singleton类,它有一个函数来检查类中的变量,如果存在键,则只从变量返回值,如果不存在,则查询数据库并将其加载到变量中并返回值 或者更好的方法是使用全局变量(无论从哪个文件访问全局变量,全局变量是否具有相同的值?)而不使用类 或者不必费心缓存,只要在每次需要值时查询数据库即可&引用;“缓存”;php中的数据库值数组(2个选项,哪个更好?),php,mysql,database,caching,Php,Mysql,Database,Caching,(我在下面使用var这个词,因为我不确定它是什么,我认为它是类的全局变量) 我想缓存从数据库中的表中获取的值,以保存重复的查询。 我所做的是创建一个singleton类,它有一个函数来检查类中的变量,如果存在键,则只从变量返回值,如果不存在,则查询数据库并将其加载到变量中并返回值 或者更好的方法是使用全局变量(无论从哪个文件访问全局变量,全局变量是否具有相同的值?)而不使用类 或者不必费心缓存,只要在每次需要值时查询数据库即可 我应该发布我的想法的来源吗?查看memcached。它的目的就是要做
我应该发布我的想法的来源吗?查看memcached。它的目的就是要做你刚才描述的事情。它接受数据库查询并将结果存储在内存中,内存具有更快的I/O速度。当运行相同的查询时,您会检查该值是否存储在内存中,并且仅在值未存储时才命中数据库。memcached在当前解决方案中的价值在于跨连接持久化 查看memcached。它的目的就是要做你刚才描述的事情。它接受数据库查询并将结果存储在内存中,内存具有更快的I/O速度。当运行相同的查询时,您会检查该值是否存储在内存中,并且仅在值未存储时才命中数据库。memcached在当前解决方案中的价值在于跨连接持久化 这完全取决于您的查询-它们对数据库来说有多昂贵和沉重?如果查询非常简单和轻松,我会说缓存是不需要的(除非您在短时间内拥有大量的查询——数千或数百万)。对于简单的重复查询,您的数据库可能还将使用某种查询缓存—这也将加快速度
缓存昂贵的查询更有意义。然后,您可以按照建议使用memcache,也可以使用APC cache。这完全取决于您的查询—它们对数据库来说有多昂贵和沉重?如果查询非常简单和轻松,我会说缓存是不需要的(除非您在短时间内拥有大量的查询——数千或数百万)。对于简单的重复查询,您的数据库可能还将使用某种查询缓存—这也将加快速度
缓存昂贵的查询更有意义。然后,您可以按照建议使用memcache,也可以查看APC缓存。如果只是链接,您可以将它们存储在会话中,这意味着它们仅在您第一次浏览到包含该链接的页面时创建。如果您能够提前获取所有链接并将它们存储在会话中,您可以这样做
session_start();
setupLinks();
// Getting a link by Link ID
if( ($aLink = getLink(562)) !== null) {
echo "The Link Title is: {$aLink['value']}<br>";
} else {
echo "The Link Title is unknown<br>";
}
// Getting a link by Key
if( ($aLink = getLink('my_link_key')) !== null) {
echo "The Link Title is: {$aLink['value']}<br>";
} else {
echo "The Link Title is unknown<br>";
}
function setupLinks() {
// Only do this once, so if the links exist do nothing
if(!isset($_SESSION['aLinks'])) {
return null;
}
storeLinks(getAllLinks()); // your own custom function
}
function storeLinks($aLinks) {
foreach($aLinks as $aLink) {
$_SESSION['aLinks'][$aLink['id']] = array(
'key' => $aLink['key'],
'value' => $aLink['value']
);
}
}
function getLink($iLinkID) {
return isset($_SESSION['aLinks'][$iLinkID]) ? $_SESSION['aLinks'][$iLinkID] : null;
}
function getLinkByKey($sLinkKey) {
foreach($_SESSION['aLinks'] as $aLink) {
if($sLinkKey == $aLink['key']) { return $aLink; }
}
return null;
}
session_start();
setupLinks();
//按链接ID获取链接
if(($aLink=getLink(562))!==null){
echo“链接标题是:{$aLink['value']}
”;
}否则{
echo“链接标题未知
”;
}
//通过键获取链接
if($aLink=getLink('my\u link\u key'))!==null){
echo“链接标题是:{$aLink['value']}
”;
}否则{
echo“链接标题未知
”;
}
函数setupLinks(){
//只做一次,所以如果链接存在,什么也不做
如果(!isset($\u会话['aLinks'])){
返回null;
}
storeLinks(getAllLinks());//您自己的自定义函数
}
函数storeLinks($aLinks){
foreach($aLinks作为$aLink){
$\u会话['aLink'][$aLink['id']]=array(
'key'=>$aLink['key'],
'value'=>$aLink['value']
);
}
}
函数getLink($kid){
返回isset($\u会话['aLinks'][$iLinkID])?$\u会话['aLinks'][$iLinkID]:null;
}
函数getLinkByKey($sLinkKey){
foreach($\会话['aLinks']作为$aLink){
如果($sLinkKey==$aLink['key']){返回$aLink;}
}
返回null;
}
如果只是链接,您可以将它们存储在会话中,这意味着它们仅在您第一次浏览到包含链接的页面时创建。如果您能够提前获取所有链接并将它们存储在会话中,您可以这样做
session_start();
setupLinks();
// Getting a link by Link ID
if( ($aLink = getLink(562)) !== null) {
echo "The Link Title is: {$aLink['value']}<br>";
} else {
echo "The Link Title is unknown<br>";
}
// Getting a link by Key
if( ($aLink = getLink('my_link_key')) !== null) {
echo "The Link Title is: {$aLink['value']}<br>";
} else {
echo "The Link Title is unknown<br>";
}
function setupLinks() {
// Only do this once, so if the links exist do nothing
if(!isset($_SESSION['aLinks'])) {
return null;
}
storeLinks(getAllLinks()); // your own custom function
}
function storeLinks($aLinks) {
foreach($aLinks as $aLink) {
$_SESSION['aLinks'][$aLink['id']] = array(
'key' => $aLink['key'],
'value' => $aLink['value']
);
}
}
function getLink($iLinkID) {
return isset($_SESSION['aLinks'][$iLinkID]) ? $_SESSION['aLinks'][$iLinkID] : null;
}
function getLinkByKey($sLinkKey) {
foreach($_SESSION['aLinks'] as $aLink) {
if($sLinkKey == $aLink['key']) { return $aLink; }
}
return null;
}
session_start();
setupLinks();
//按链接ID获取链接
if(($aLink=getLink(562))!==null){
echo“链接标题是:{$aLink['value']}
”;
}否则{
echo“链接标题未知
”;
}
//通过键获取链接
if($aLink=getLink('my\u link\u key'))!==null){
echo“链接标题是:{$aLink['value']}
”;
}否则{
echo“链接标题未知
”;
}
函数setupLinks(){
//只做一次,所以如果链接存在,什么也不做
如果(!isset($\u会话['aLinks'])){
返回null;
}
storeLinks(getAllLinks());//您自己的自定义函数
}
函数storeLinks($aLinks){
foreach($aLinks作为$aLink){
$\u会话['aLink'][$aLink['id']]=array(
'key'=>$aLink['key'],
'value'=>$aLink['value']
);
}
}
函数getLink($kid){
返回isset($\u会话['aLinks'][$iLinkID])?$\u会话['aLinks'][$iLinkID]:null;
}
函数getLinkByKey($sLinkKey){
foreach($\会话['aLinks']作为$aLink){
如果($sLinkKey==$aLink['key']){返回$aLink;}
}
返回null;
}
memcached除了跨连接持久化之外,还可以由多台服务器访问,这与singleton/globals/APC中的缓存不同。当您有多台服务器时,由于在每台服务器上存储重复的缓存值,无法共享缓存的成本会很快变得非常高。对不起,什么是跨连接持久性?当您使用变量(全局或非全局)时,您只能将其用于该请求。因此,当该用户加载下一页、刷新或其他用户加载该页时,该变量在下一个“连接”中将不再可用。Memcache在连接之间是持久的,因为数据仍然