𝕷𝖎𝖑𝖏𝖆𝖈𝖐 发表于 2026-1-11 07:38:08

分享个小知识,帝国CMS评论分表新评论更新缓存

分享个小知识,帝国CMS评论分表新评论更新缓存?小编一memcached缓存做例子。为了方便复用我们定义两个函数,一个函数能生成key键值名与SQL的数组。另外一个就不用多说了哈,很明显就是新的评论删除这个key键值名就可以了。
//生成评论分表缓存信息(缓存键值名+拼接SQL语句)function getPlCacheKey($pldatatbs, $pubid, $order = '') {global $dbtbpre, $public_r;$biaoship = $public_r['add_pcurl'] ?: 'meiweny';$biaoshi = str_replace(['http://','https://','/','www.','.'], "", $biaoship);$fenbiaopl = explode(',', $pldatatbs);$unionQuery = '';for ($i = 1; $i < count($fenbiaopl)-1; $i++) {$sql = "select plid, saytime, sayip, username, zcnum, fdnum, userid, saytext, fdnum, floornum, replypl from {$dbtbpre}enewspl_{$fenbiaopl[$i]} where pubid='$pubid'";$unionQuery = $i == 1 ? $sql : $unionQuery . " union all " . $sql;}$finalSql = $unionQuery . $order; $cacheKey = 'pc' . $biaoshi . '_pinglun_' . md5($finalSql);return ['key' => $cacheKey,'sql' => $finalSql];}//删除评论分表缓存function deletePlCache($cacheKey) {global $memcache;if ($memcache === null) {echo "Error: Memcache实例为空!";return false;}return $memcache->delete($cacheKey);}不用讲,这两个东西还是放在/e/class/userfun.php里面哈。接下来我们就在评论发布成功那个文件plfun.php加上如下语句(ecmsEmptyShowKey($keyvname);//清空验证码)下面增加
$hcpagenum = isset($_POST['hcpagenum']) ? (int)$_POST['hcpagenum'] : $public_r['pl_num'];$hcorder = ' order by plid desclimit 0,'.$hcpagenum;$hcResult = getPlCacheKey($plsetr['pldatatbs'], $pubid, $hcorder);deletePlCache($hcResult['key']);接下来就是多表读取的index.php,($order=" order by ".$addorder."limit $offset,$line";)下面增加
$plsqlarray = getPlCacheKey($plr['pldatatbs'], $pubid, $order);$plSql = $plsqlarray['sql'];至此,完美实现了帝国CMS评论分表新有新的评论更新缓存

婷姐 发表于 2026-1-11 07:38:35

很好的分享

独家记忆 发表于 2026-1-11 07:38:49

很好的分享

拾光 发表于 2026-1-11 07:39:17

学习了学习了

IT618发布 发表于 2026-1-11 07:40:07

很好的分享

Crystαl 发表于 2026-1-11 07:40:19

很好的分享

TyCoding 发表于 2026-1-11 07:41:05

很好的分享
页: [1]
查看完整版本: 分享个小知识,帝国CMS评论分表新评论更新缓存