浅谈thinkPHP中利用缓存处理高并发的思路

来源:互联网 发布:python 库安装过程 编辑:程序博客网 时间:2024/05/22 14:53

此内容如有问题,请多多指教



Thinkphp默认各类缓存都是以文件缓存的

改的话在配置文件里改

'DATA_CACHE_TYPE'       =>  'File',  // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator

 

S数据缓存与F快速缓存最大的区别是:

 

S能设置缓存有效时间,来删除自动缓存数据

而F不能设置只能强制删除
F('data',NULL);S同理一样强制删S('data',NULL)
查询缓存cache默认是true即开启了缓存的
   注意:当向数据库发送不同数据库时,会产生不同的查询缓存文件,
 

          M('admin')->cache()->where()->select();

      M('admin')->cache()->where()->select();像数据库发送相同同数据库时只产生一条查询缓存文件,

          M('admin')->cache()->where()->select();

      M('admin')->cache()->where()->find();
 

 

处理高并发解决方案:

当我们网站访问量大了的时候,解决卡顿问题,

 

方法1:可以从数据库着手,运用主从式分布式数据库分配用户请求数据库地址,(上了百万级同理),

假如在线用户有10w人平均每一个人1秒钟向数据库发送3条数据库那么就有30万数据发送数据库,

SQL的量可能会非常巨大,所以有必要设置下缓存的队列长度,例如,我们希望SQL解析缓存不超过5000条记录,可以设置:

1. 'DB_SQL_BUILD_LENGTH' => 5000, // SQL缓存的队列长度
2. 然后分配到各个数据中从而减轻了服务器的压力

方法二 从服务器端运用nginx配置服务器,(负载均衡)具体有待完善

 

 

方法3假如有100000用户同时在我们p2p平台借款(其中可能会出现一小部分用户卡顿借款失败),为了解决其中出现的的问题,

我们可以设置两个线程:

1.    主线程正常执行所有用户的请求

2.    把所有用户全部放到事务队列处理,副线程只用来—>读事务队列的结果集

提高用户体验


1 0