ThinkSNS 缓存数据原理简单研究

原创 2015年07月06日 18:20:54

研究背景:不是很熟悉PHP语言,通过 echo输出、工作搜索等方式倒推出这个流程出来的..........微笑

1.访问UR:http://localhost/test/test/index.php?app=public&mod=Index&act=index

通过该地址就定位到了:IndexAction----》function index-----》$this->display();---》$this->fetch-------》 return fetch($templateFile, $this->tVar, $charset, $contentType, $display);

研究发现最后一个fetch会被调用多次,第一次的入口就如上面的分析流程,至于第二次第三次的根源入口不详

其中某次调用fetch时是返回的我关注的微博数据,下面我们来倒推下这个微博数据的来源吧

2.fetch-------------》Widget-----》renderFile(倒推)

rederFile是对指定的模板和数组数据进行结合并且输出


---->FeedListWidget--->getData---->render  这是widget的子类,作用是获取微博的数据,并且加以渲染

其中 getData中$list =  model('Feed')->getFollowingFeed($where,$this->limitnums,'',$var['fgid'],$max);实际上拉取到了微博内容

对应方法定义在FeedModel---getFollowingFeed

其中    $feedlist['data'] = $this->getFeeds($feed_ids);实际拉倒到了微博信息

其中$cacheList = model('Cache')->getList('fd_', $feed_ids);拉倒到了微博信息

对应在CacheModel的getList

其中$data[$k] = $this->get($_k)获取数据

其中  $data = $this->handler->get($key);// 获取缓存数据,其中的key就是Feed表中的主键

而handler:$this->handler = Cache::getInstance($type);

handler是一个Cache实例,是文件缓存的句柄(protected $type = 'FILE';                // 缓存类型,默认为文件缓存)


综合上面的流程来看,其实就是从缓存文件中读取数据,并且与相应的模板结合输出到浏览器,但是对于微博的key每次都是要从数据库读取出来的,

这样想想可以确保数据的及时变化和内容的缓存有效的结合在一起,删除内容后缓存及时得到变更,读取数据效率也得到极大的提升


那么还有一个问题值得我们思考的就是,是谁调用了FeedListWidget.render呢,经过查找,发现是被function.inc.php中的W函数调用了


那么W函数在哪里呢,看这个

typefollowing----------ssssssss啦-------------------------------hi boy-------------
templateFile:C:\wamp1\www\test/apps/public/Tpl/default/Index/index.htmltemplateCacheFile:C:\wamp1\www\test/_runtime/tplcache//public_a8bfdef57b7c8498.php

这个是第一次进入fetch中输出的一个模板文件,模板文件中有这么一句话

<!--feed list-->
                    <?php echo W('FeedList',array('type'=>$type,'feed_type'=>$feed_type,'feed_key'=>$feed_key,'fgid'=>t($_GET['fgid'])));?>
                    </div>
                    </div>

哈哈,原来就是在这里使用了W函数,到此我们就分析出来了微博内容是因为我们访问了那个URL ,得到模板文件,而模板文件使用了W函数,

然后进行了render调用,然后响应的Widget实例,调用fetch函数从而把其他小模板和数据集合渲染出来,看样子,我们开始的那个 模板文件相当于

这个页面的向导模板,通过这个向导,我们把各个零散的模板组织在一起从而呈现出一个页面出来


思考1:既然每次还是要读取数据库,那么如何保证数据库的性能呢?

FeedModel里查询我关注的微博首先查询我关注的用户发表的微博id,通过联合查询区查询

        $table = "{$this->tablePrefix}feed AS a LEFT JOIN {$this->tablePrefix}user_follow AS b ON a.uid=b.fid AND b.uid = {$buid}";

关于这一点,我很头疼,数据量一旦过大必然会导致性能的降低,如何做好分库分表值得深思解决!



思考2:文件缓存是如何保持它的高效性能呢?如何切换到别的缓存呢?

我们可以把缓存用成memcache,然而这个cache我想也是需要切割的,那么如何有效的和数据库分库分表结合到一起呢,值得深思


案例下载:http://pan.baidu.com/s/1vz15k

thinksns 核心架构及目录结构

核心与服务、公共Model、插件、Widget、第三方类库共同构成了系统的大根基,其他所有应用都其上构建。 术语解释  核心:源自ThinkPHP框架,为系统提供MVC分离、底层数据库支持等核心功能,...
  • yafei450225664
  • yafei450225664
  • 2013年08月28日 13:20
  • 8665

开源社交系统ThinkSNS基础技术要点分享 让你少走弯路!

经过9年的历练,开源社交系统ThinkSNS已经积累了很多用户与粉丝,下面我们将为关注ThinkSNS的朋友介绍开源社交系统ThinkSNS基础的技术要点: (如果对ThinkSNS产品还有...
  • ThinkSNS_
  • ThinkSNS_
  • 2017年03月30日 15:42
  • 415

简析SNS社交系统ThinkSNS适用的行业!

ThinkSNS是国内领先开源社交系统,从web时代到社群经济时代,开源社交系统ThinkSNS从未放弃,一直前行,志在打造最出色的开源社交系统,推动国内外SNS发展。ThinkSNS目前已经具有成型...
  • ThinkSNS_
  • ThinkSNS_
  • 2017年03月31日 17:04
  • 390

开源SNS社交系统ThinkSNS+安装部署演示视频!

社群系统TS+一期版本发布之后,很多小伙伴们反馈安装部署有些困难,那么今天由我们的颜值与技术实力担当乔斌大佬通过录制视频的形式,给大家演示一下部署的整个过程,录制过程中有些杂音,请各位尽情谅解,后续我...
  • ThinkSNS_
  • ThinkSNS_
  • 2017年08月01日 15:21
  • 1196

thinksns 目录结构

核心与服务、公共Model、插件、Widget、第三方类库共同构成了系统的大根基,其他所有应用都其上构建。 术语解释  核心:源自ThinkPHP框架,为系统提供MVC分离、底层数据库支持等核心功...
  • helin916012530
  • helin916012530
  • 2013年06月18日 16:49
  • 2985

php服务器的搭建和thinksns的安装

挣扎了一天一晚呀,终于搞定了。觉得太憋屈了在这里发泄下,自己真的是弱爆了,也算是狠狠得鄙视下自己吧! 在本地搭建thinksns微博的话首先要安装php服务器,我用的是WampServer,可以到官网...
  • jiangyou4
  • jiangyou4
  • 2014年03月08日 21:47
  • 1852

ThinkSNS中判断访问请求请求来源是否为手机的方法

/** * 检查是否是以手机浏览器进入(IN_MOBILE) */ function isMobile() { $mobile = array(); static $mobileb...
  • zouqingfang
  • zouqingfang
  • 2016年07月26日 09:16
  • 602

开源社交系统“ThinkSNS+”新系统首发内测通知

有憧憬的期待总是值得等待的。ThinkSNS励志为网站搭建,微信端程序,手机APP开发打造全行业最权威好用的源码输出型软件系统,源于开源社交,但不止于社交。   在这里喜大普奔告知所有的关注者,...
  • ThinkSNS_
  • ThinkSNS_
  • 2017年04月14日 16:55
  • 648

基于 Laravel Route 的 社交系统ThinkSNS+ Component【研发日记三】

在前面,我介绍了拓展类型,分别有 plus-compnent 和 plus-plugin 两个,这里重点讲以下如何实现 plus-component 的。 plus-component 是什么 就...
  • ThinkSNS_
  • ThinkSNS_
  • 2017年05月10日 14:41
  • 653

ThinkSNS/ThinkSNS后台应用管理

ThinkSNS| ThinkSNS安装指南| ThinkSNS使用| ThinkSNS二次开发指南| ThinkSNS模板开发教程   目录 ...
  • cui_angel
  • cui_angel
  • 2013年01月23日 11:46
  • 3305
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ThinkSNS 缓存数据原理简单研究
举报原因:
原因补充:

(最多只允许输入30个字)