PHP高效文件缓存类FCache

自己用的阿里云低配置,最近访问不错,经常出现mysql崩溃的问题,提单说请加内存,这回复还不如直接说:请交钱!

于是自己在git找了php的文件缓存,发现都是将缓存放到一个缓存文件!!!意味着:

1.无论你是读取多大的数据,都需要从磁盘读出整个文件到内存,然后解析,获取你要的部分数据;

2.在缓存数据很大的时候,并不能起到缓存加速网站访问的目的,同时增加磁盘的读写负荷;

3.在某一个临界点,可能会导致缓存性能比数据库还差;

4.未经过严格测试,个人预估一般网站的数据都会达到100M以上,如果每次访问需要读取100M的数据,然后解析,性能非常低效。

感觉这些写开源项目的作者写完之后,自己肯定没有做相关的时间测试,虽然我自己也没有做测试,于是自己按照自己的需求写了一个fcache.inc.php,放到git上了(https://github.com/hustcc/php-file-cache )

PHP File Cache, Used to instead of memcache in Host which can not install memcache.

1.one cache, one file, reduce calculate of key and value, to gain hign performaance.

2.simple api to use. similar with memcache.

使用很简单,Demo

<?php
require_once(‘fcache.inc.php‘);
//example
$cache = new FCache();
$storeData = array(
      ‘time‘   => time(),
      ‘str‘ => ‘test‘,
      ‘int‘   => 1321
);
$cache->add(‘select * from table;‘, $storeData);
$cache->add(‘select * from table;‘, $storeData);
$cache->add(‘select * from table;‘, $storeData);
$cache->add(‘select * from table;‘, $storeData);
print_r($storeData = $cache->get(‘select * from table;‘));
$cache->delete(‘select * from table;‘);
print_r ($cache->get(‘select * from table;‘) ? ‘exist‘: ‘has no cache‘);
$cache->add(‘select * from table1;‘, 123);
$cache->add(‘select * from table2;‘, 234);
$cache->add(‘select * from table3;‘, 345);
$cache->flush();
print_r ($cache->get(‘select * from table3;‘) ? ‘exist‘: ‘has no cache‘);
?>
如果有其他的需求,请回复~Enjoy~

在自己的网站上使用了进1周,没有什么问题!

http://50vip.com/

http://www.atool.org/

如果有其他的需求,请回复~Enjoy~

时间: 2024-08-05 05:09:20

PHP高效文件缓存类FCache的相关文章

PHP文件缓存类

1 <?php 2 /** 3 * @desc 文件缓存 4 */ 5 class Cache{ 6 const C_FILE = '/Runtime/'; 7 private $dir = ''; 8 const EXT = '.tpl'; 9 private $filename = ''; 10 public function __construct($dir = ''){ 11 $this->dir = $dir; 12 13 } 14 /** 15 * @desc 设置文件缓存 16

一个不错的PHP文件页面缓存类

在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考. 页面缓存类  代码如下 复制代码 <?php    /*    * 缓存类    cache   * 作    者:多菜鸟   * 实    例:   */   /*include( "cache.php" );       $cache = new cache(30);   $cache->cacheCheck();       echo dat

SD卡创建文件夹失败,解决办法及文件缓存

1.相关代码: 添加权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> /** 获取SD卡路径 **/ private static String getSDPath() { St

php 文件缓存

http://www.oschina.net/code/snippet_162279_6098 <?php class cache {       private static $_instance = null;     protected $_options = array(         'cache_dir'        => "./",         'file_name_prefix' => 'cache',         'mode'      

android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决

1.相关代码: 加入权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> /** 获取SD卡路径 **/ private static String getSDPath() { St

Volley随笔之文件缓存DiskBasedCache类

Volley提供了一个基于文件的缓存类DiskBasedCache保存缓存数据.这个类完成缓存工作的原理大致如此,首先声明一个文件夹,文件夹下的文件与cacheKey一一对应,也就是说每一个文件时不同网络请求的返回数据.文件的格式是这样,文件头是数据结构CacheHeader,描述了缓存的信息,之后就是缓存数据. 下面是DiskBasedCache的代码,不得不说很优美! /*  * Copyright (C) 2011 The Android Open Source Project * * L

缓存处理类(MemoryCache结合文件缓存)

想提升站点的性能,于是增加了缓存,但是站点不会太大,于是不会到分布式memcached的缓存和redis这个nosql库,于是自己封装了.NET内置的缓存组件 原先使用System.Web.Caching.Cache,但是asp.net会在System.Web.Caching.Cache缓存页面等数据,于是替换了System.Web.Caching.Cache为MemoryCache. 而在使用MemoryCache的时候,重新启动网站会丢失缓存,于是加了自己的扩展,将缓存序列化存放在文件内,在

你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写

思路:java.util.concurrent.locks包下面ReadWriteLock接口,该接口下面的实现类ReentrantReadWriteLock维护了两个锁读锁和解锁,可用该类实现这个功能,很简单 import java.util.Date; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /**  * 你需要实现一个

iOS缓存类的设计

使用执行速度缓存的程序可以大大提高程序,设计一个简单的缓存类并不需要太复杂的逻辑. 只需要一个简单的3接口. 存款对象 以一个对象 删除对象 阅读对象 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdXh5aGVhdmVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 读取对象的时候先读内存 内存没有就读文件 保存对象 保存对象的时候前台