Windwork 缓存组件

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Windwork 缓存组件提供简易健壮的缓存组件,5分钟即可完全掌握。 目前支持文件缓存、Memcache、Memcached、Redis缓存存储。

Windwork 缓存组件

服务器端缓存是将程序需要频繁访问的网络内容存放在本地文件或缓存服务器中,缓存过期前直接从缓存中读取内容,以提高访问速度。
如频繁访问但不经常更新的一些数据库查询、微信接口令牌等。

Windwork 缓存组件提供简易健壮的缓存组件,5分钟即可完全掌握。
目前支持文件缓存、Memcache、Memcached、Redis缓存存储。

缓存读写

默认使用文件缓存

// 缓存参数
$cfg = [
    'enabled'    => 1,             // 是否启用缓存
    'dir'        => 'data/cache',  // 缓存文件夹,如果使用缓存服务器,则是缓存变量的前缀
    'expire'     => 3600,          // 缓存更新周期(默认:3600s)
    'compress'   => 0,             // 是否启用缓存内容压缩后存贮
    'class'    => '\\wf\\cache\\adapter\\File',        // 缓存模式,File)文件缓存;Memcache)使用Memcache缓存;Memcached)使用Memcached缓存;Redis)使用Redis缓存
];
$cache = new $cfg['class']($cfg);

// 从缓存读取数据
if(null === ($ret = $cache->read('cache/key'))) {
    // 缓存中无数据则初始化并写入缓存,下次就可以直接从缓存中获取
    $ret = '缓存内容'; // 可以是标量或数组内容,不能是资源类型
    $cache->write('cache/key', $ret);
}

// 在这里使用缓存过的$ret变量
AI 代码解读

删除缓存内容

// 删除一条缓存
$cache->delete('cache/key');

// 清空全部缓存
$cache->clear();

// 通过前缀清空缓存
$cache->clear('user/info'); // 清空所有以 'user/info/' 开头的缓存内容
AI 代码解读

使用memcache/memcached缓存

// Memcache
$cfg = [
    'enabled'    => 1,             // 是否启用缓存
    'dir'        => 'data/cache',  // 缓存文件夹,如果使用缓存服务器,则是缓存变量的前缀
    'expire'     => 3600,          // 缓存更新周期(默认:3600s)
    'compress'   => 0,             // 是否启用缓存内容压缩后存贮
    'class'    => '\\wf\\cache\\adapter\\Memcache',        // 缓存模式,File)文件缓存;Memcache)使用Memcache缓存;Memcached)使用Memcached缓存;Redis)使用Redis缓存

    ['memcache'] => [
        'host'        => '127.0.0.1',     //
        'port'        => 11211,           //
        'pconnect'    => 1,               //
        'timeout'     => 1,               // 超时时间(秒)
    ],
];
$cache = new $cfg['class']($cfg);

// Memcached
$cfg = [
    'enabled'    => 1,             // 是否启用缓存
    'dir'        => 'data/cache',  // 缓存文件夹,如果使用缓存服务器,则是缓存变量的前缀
    'expire'     => 3600,          // 缓存更新周期(默认:3600s)
    'compress'   => 0,             // 是否启用缓存内容压缩后存贮
    'class'      => '\\wf\\cache\\adapter\\Memcached',        // 缓存模式,File)文件缓存;Memcache)使用Memcache缓存;Memcached)使用Memcached缓存;Redis)使用Redis缓存

    ['memcached'] => [
        'host'        => '127.0.0.1',     //
        'port'        => 11211,           //
        'pconnect'    => 1,               //
        'timeout'     => 1,               // 超时时间(秒)
    ],
];

$cache = new $cfg['class']($cfg);
AI 代码解读

使用Redis缓存

使用phpredis扩展进行操作
https://github.com/phpredis/phpredis

Windows php_redis.dll 模块下载(根据你的PHP版本选择下载)
http://windows.php.net/downloads/pecl/snaps/redis/

$cfg = [
    'enabled'    => 1,             // 是否启用缓存
    'dir'        => 'data/cache',  // 缓存文件夹,如果使用缓存服务器,则是缓存变量的前缀
    'expire'     => 3600,          // 缓存更新周期(默认:3600s)
    'compress'   => 0,             // 是否启用缓存内容压缩后存贮
    'class'      => '\\wf\\cache\\adapter\\Redis',        // 缓存模式,File)文件缓存;Memcache)使用Memcache缓存;Redis)使用Redis缓存
    
    'redis' => [
        'host'           => '127.0.0.1',     //
        'port'           => 6379,            //
        'pconnect'       => 1,               //
        'password'       => '',              // redis密码,不需要密码验证则留空
        'timeout'        => 0,               // 超时时间(秒),0为不限
    ],
];

$cache = new $cfg['class']($cfg);
AI 代码解读

在Windwork中使用缓存组件

在Windwork项目中设置好缓存配置后,使用cache()函数访问缓存对象实例。

1、在配置文件 config/app.php中设置缓存配置(默认使用文件缓存)

// config/app.php
return [    
    // 缓存组件设置
    'cache' => [
        'enabled'          => 1,                   // 是否启用缓存
        'class'            => '\\wf\\cache\\adapter\\File',              // 缓存模式,File|Memcache|Memcached|Redis
        'dir'              => dirname(__DIR__) . '/data/cache',        // 缓存文件夹
        'expire'           => 7200,                // 缓存更新周期(默认:7200s)
        'compress'         => 0,                   // 是否启用缓存内容压缩后存贮(建议只在虚拟主机中使用文件缓存时启用,以便省出存储空间)
    
        // redis
        'redis' => [
            'host'         => '127.0.0.1',     //
            'port'         => 6379,            //
            'pconnect'     => 1,               //
            'timeout'      => 0,               // 超时时间(秒),0为不限
        ],
        // memcache
        'memcache' => [
            'host'         => '127.0.0.1',     //
            'port'         => 11211,           //
            'pconnect'     => 1,               //
            'timeout'      => 1,               // 超时时间(秒),0为不限
        ],
        // memcached
        'memcached' => [
            'host'         => '127.0.0.1',     //
            'port'         => 11211,           //
            'pconnect'     => 1,               //
            'timeout'      => 1,               // 超时时间(秒),0为不限
        ],
    ],
];
AI 代码解读

2、使用缓存组件

// 读取 
cache()->read('some/var/data');

// 写入 
cache()->write('some/scalar/data/key', 'some data');
cache()->write('some/array/data/key', ['some data 1', 'some data 2']);

// 删除'some/scalar/data/key'缓存
cache()->delete('some/scalar/data/key');

// 清除some/*缓存
cache()->clear('some');

// 清除全部缓存
cache()->clear();
AI 代码解读
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
0
0
0
1
分享
相关文章
缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界
缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界
缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界
vue中的一个内置组件Keep-Alive的作用及使用方法介绍——缓存不活动的组件实例
vue中的一个内置组件Keep-Alive的作用及使用方法介绍——缓存不活动的组件实例
248 1
《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件
《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件
188 2
|
5月前
|
vue2进阶篇:vue-router之缓存路由组件
vue2进阶篇:vue-router之缓存路由组件
69 1
Vue学习之--------编程式路由导航、缓存路由组件、新的钩子函数(4)(2022/9/5)
这篇文章介绍了Vue中编程式路由导航的方法,包括使用`router.pushrouter.replace`、`router.forwardrouter.back`和`$router.go`进行路由跳转和历史记录操作,以及如何利用`<keep-alive>`组件缓存路由组件,和Vue Router新增的两个生命周期钩子`activated`和`deactivated`的用法及其在项目中的应用和测试结果。
Vue学习之--------编程式路由导航、缓存路由组件、新的钩子函数(4)(2022/9/5)
|
6月前
|
造轮子能力大提升:基于SpringBoot打造高性能缓存组件
在快节奏的软件开发领域,"不重复造轮子" 常常被视为提高效率的金科玉律。然而,在某些特定场景下,定制化的高性能缓存组件却是提升系统性能、优化用户体验的关键。今天,我们将深入探讨如何利用SpringBoot框架,从零开始打造一款符合项目需求的高性能缓存组件,分享我在这一过程中的技术心得与学习体会。
98 6
使用 keep-alive 时,监控和分析组件的缓存行为
使用 keep-alive 时,监控和分析组件的缓存行为
请问如何在 keep-alive 组件中设置缓存的最大数量和过期时间
请问如何在 keep-alive 组件中设置缓存的最大数量和过期时间
react18【系列实用教程】memo —— 缓存组件 (2024最新版)
react18【系列实用教程】memo —— 缓存组件 (2024最新版)
177 0
Vue-Router路由动态缓存组件(keep-alive),vue2/vue3不同写法
Vue-Router路由动态缓存组件(keep-alive),vue2/vue3不同写法
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等