iCMS:cahce 缓存标签

iCMS 缓存标签技术文档

缓存标签 (cache)

缓存标签用于在模板中存储和获取缓存数据。

iCMS:cache 标签

支持参数

参数名 类型 默认值 说明
key 字符串 - 缓存键名(必填)
value 混合类型 - 要缓存的值
time 整数 0 缓存时间(秒),0表示永久
skey 字符串 null 二级缓存键名

返回值

  • 设置缓存时:无返回值
  • 获取缓存时:返回缓存的数据,如果缓存不存在则返回 false

使用示例

<!-- 设置缓存 -->
<!--{iCMS:cache key="home_data" value="$home_data" time="3600"}-->

<!-- 获取缓存 -->
<!--{iCMS:cache key="home_data"}-->
<!--{if $cache}-->
  <!-- 使用缓存数据 -->
  <!--{foreach key="key" value="value" from="$cache"}-->
    <div><!--{$value.title}--></div>
  <!--{/foreach}-->
<!--{/if}-->

常见应用场景

1. 缓存首页数据

<!--{iCMS:cache key="home_page" time="1800"}-->
<!--{if !$cache}-->
  <!--{iCMS:article row="10" orderby="hot"}-->
  <!--{iCMS:cache key="home_page" value="$article" time="1800"}-->
<!--{else}-->
  <!--{assign var="article" value="$cache"}-->
<!--{/if}-->

<div class="article-list">
  <!--{foreach key="key" value="value" from="$article"}-->
    <div class="article-item">
      <h3><!--{$value.title}--></h3>
      <p><!--{$value.description}--></p>
    </div>
  <!--{/foreach}-->
</div>

2. 缓存分类数据

<!--{iCMS:cache key="category_tree"}-->
<!--{if !$cache}-->
  <!--{iCMS:category pid="0"}-->
  <!--{iCMS:cache key="category_tree" value="$category"}-->
<!--{else}-->
  <!--{assign var="category" value="$cache"}-->
<!--{/if}-->

<ul class="category-list">
  <!--{foreach key="key" value="value" from="$category"}-->
    <li><a href="<!--{$value.url}-->"><!--{$value.name}--></a></li>
  <!--{/foreach}-->
</ul>

3. 缓存用户数据

<!--{iCMS:cache key="user_$id" skey="profile"}-->
<!--{if !$cache}-->
  <!--{iCMS:user id="$id"}-->
  <!--{iCMS:cache key="user_$id" value="$user" skey="profile" time="600"}-->
<!--{else}-->
  <!--{assign var="user" value="$cache"}-->
<!--{/if}-->

<div class="user-profile">
  <img src="<!--{$user.avatar}-->" alt="<!--{$user.nickname}-->">
  <h2><!--{$user.nickname}--></h2>
</div>

性能优化建议

  1. 合理设置缓存时间

    • 频繁更新的数据设置较短的缓存时间
    • 不经常变化的数据可以设置较长的缓存时间
    • 永久缓存需要在数据更新时手动清理
  2. 使用二级缓存

    • 通过 skey 参数可以实现多级缓存
    • 便于管理和清理特定类型的缓存
  3. 避免缓存过大数据

    • 建议只缓存必要的数据
    • 对于大数据考虑分片缓存

调试技巧

  1. 检查缓存是否生效
<!--{iCMS:cache key="test" value="当前时间:$time"}-->
<!--{$cache}-->
  1. 清理特定缓存
Cache::delete('cache_key');
  1. 使用调试模式
<!--{iCMS:cache key="debug_data" debug="1"}-->

注意事项

  1. key 参数为必填项,否则将返回 false
  2. 缓存时间单位为秒,0 表示永久缓存
  3. 使用 skey 可以实现多级缓存,便于管理
  4. 建议为缓存键名添加前缀,避免冲突
  5. 在更新数据时注意及时清理相关缓存