💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### CACHE 缓存函数 语法:`cache($options)` 不同的缓存方式所需要的参数是不同的 所有缓存方式公用配置项 | 配置项 | 说明 | | -- | -- | | driver | 缓存的类型 | | expire | 默认的缓存时间 | | prefix | 缓存前缀,区分不同控制器或方法中的同名 KEY | | length | 队列长度,队列即允许缓存的数量 | | zip | 是否启动缓存数据压缩存储 | 不同缓存类型的配置项说明 | 配置项 | 配置项名 | 说明 | | -- | -- | | file 缓存机制 | driver | file 缓存时必须设置为 file | | file 缓存机制 | dir | 缓存存放目录 | | memcache 缓存 | driver | memcache 缓存时必须设置为 memcache | | memcache 缓存 | host | array(<br>&nbsp;&nbsp;//多个服务器传入设置二维数组<br> &nbsp;&nbsp;'host'=>'127.0.0.1', //主机<br>&nbsp;&nbsp;'port'=>11211, //端口<br>&nbsp;&nbsp;'timeout'=>1, // 连接超时时间<br>&nbsp;&nbsp;'weight'=>1, // 权重 ( 多台服务器时有效设置 )<br>&nbsp;&nbsp;'pconnect'=>1, // 是否持久连接 ( 可以不用设置 )<br>) | | Redis 缓存机制 | driver | redis 缓存时必须设置为 redis | | Redis 缓存机制 | host | array(<br>&nbsp;&nbsp;//多个服务器传入设置二维数组<br> &nbsp;&nbsp;'host'=>'127.0.0.1', //主机<br>&nbsp;&nbsp;'port'=>6379, //端口<br>&nbsp;&nbsp;'password'=>'', // 主机密码 没有密码时留空<br>&nbsp;&nbsp;'timeout'=>1, // 连接超时时间 单位为秒<br>&nbsp;&nbsp;'db'=>1, // 使用的数据库<br>)<br>&nbsp;&nbsp;'pconnect'=>0, // 是否为长链接<br>) | 方法说明 | 方法 | 说明 | | -- | -- | | set($name,$value) | 设置缓存数据 | | get($name) | 获得缓存数据 | | del($name) | 删除缓存 | | delAll($time=null) | 删除所有缓存,如果设置 $time 则删除超过此值的缓存 | | options($name,$value=null) | 设置与获得缓存配置 | #### 设置缓存 set 注:以下代码中的 Cache::init() 方法不传递参数时使用配置文件设置 示例 1 ~~~ $cache = cache::init(); $data = array(// 要缓存的数据 'webname' => '懒人网', 'time' => time() ); $cache->set('lanren',$data,800); ~~~ 如果没有指定缓存时间,将采用配置文件中 CACHE_TIME 选项的值 示例 2 ~~~ $cache = cache::init(array('dir'=>'cache','zip'=>true,'prefix'=>'took_')); $cache->set('took',' TookPHP');// 缓存数据 KEY 为 took echo $cache->get('took'); // 得到 KEY 为 took 的缓存内容将缓存数据放入根目录下的 cache目录,以 took_ 为缓存文件前缀,启用压缩数据 ~~~ #### 删除缓存 del 例: ~~~ //删除 took 缓存数据 $cache = cache::init(); $cache->took = null;// 删除缓存数据 //或使用函数删除 took 缓存 $cache->del('took'); ~~~ #### 删除所缓存 delAll ~~~ //删除所有缓存: $cache = cache::init(); $cache->delAll(); //删除 1 小时前的缓存文件: $cache->delAll(3600); ~~~ #### 获得与设置配置 ~~~ //获得缓存配置 $cache = cache::init(); $cache->options('expire'); //设置缓存参数 $cache->options('expire',600); echo $cache->options('expire'); ~~~ #### 缓存队列 为了避免缓存过多,可以通过 delAll() 删除过期缓存,也可以使用框架中的缓存队列特性,即指定缓存的数量,以后进先出的原则删除最旧的缓存。 注:Memcache 等缓存控制本身具有 LRU 机制,所以缓存队列目前适用于 File 缓存 ~~~ $cache = cache::init(array('length'=>2,'zip'=>false)); $cache->set('name','懒人网'); $cache->set('web','www.lanren.com'); $cache->set('bbs','bbs.lanren.com'); ~~~ 设置了 length 即队列长度为 2 所以只能缓存 2 条记录,队列采用先进先出的原则 , 所以 name 将被删除 #### 以 Memcache 操作缓存 无论是使用 Memcache 或者 Redis 操作缓存,可以通过修改配置文件的方式 ,或者调 用 cache::init() 方法时传递参数即可,示例如下: ~~~ $cache = cache::init(array( 'driver'=>'memcache', 'host'=>array('host'=>'127.0.0.1','port'=>11211)) ); $cache->set('webname','懒人网'); echo $cache->get('webname'); ~~~ #### 以 Redis 操作缓存 无论是使用 Memcache 或者 Redis 操作缓存,可以通过修改配置文件的方式 ,或者调 用 cache::init() 方法时传递参数即可,示例如下: ~~~ $cache = cache::init(array( 'driver'=>'redis', 'host'=>array('host'=>'127.0.0.1','port'=>6379)) ); $cache->set('webname','懒人网'); echo $cache->get('webname'); ~~~ #### S() 缓存函数 上面学习了通过 cache 类操作缓存,其实 S 方法也是通过 Cache 类操作缓存,只是提 供了一种快捷的函数调用方式。 如果使用 memcache 或 redis 进行缓存操作,请修改配置文件中的相应配置项 ~~~ S($name, $value = false, $expire = null, $options = array()) ~~~ | 参数 | 说明 | | -- | -- | | $name | 缓存名称 | | $value | 缓存内容 | | $expire | 缓存时间 | | $options | 缓存对象参数如 array('dir'=>'cache','driver'=>'memcache','host'=>array('host'=>'127.0.0.1','port'=>11211,'timeout'=>1)) | ~~~ //缓存数据 S('webname','懒人网'); echo S('webname'); //删除缓存 S('webname',null) //设置缓存驱动 S('webname','bbs.lanren.com',1440,array('dir'=>'cache','driver'=>'file','zip' =>true)); ~~~ 将数据缓存到 cache 目录,以 file 文件形式缓存,启用数据压缩 #### F() 快速文件缓存 通过 F() 方法以文件形式快速对数据进行缓存 ~~~ function F($name, $value = false, $path = CACHE_PATH) ~~~ | 参数 | 说明 | | -- | -- | | $name | 缓存名称 | | $value | 缓存内容 | | $path | 数据存放目录 | ~~~ //缓存数据 F('webname',array('name'=>'懒人网','url'=>'lanren.com')); //获得数据 echo F('webname'); //删除缓存 F('webname',NULL); ~~~