都说smarty + memcache配合用是很好的优化组合,但我不明白为什么用了smarty还要用memcache~
因为smarty不是有页面缓存吗,比如现在有个页面A,我规定它缓存的时间是10分钟,那它只要每十分钟逻辑运算一次就可以了。还要memcache有什么用呢?
能给我举个小例子说明smarty和memcache在什么情况下配合使用吗?
谢谢各位!
回复讨论(解决方案)
存的地方不一样,memcache是存到内存中的,smarty是存到硬盘上的,读数据肯定是从内存中读取快,你看哈这2个的原理吧
存的地方不一样,memcache是存到内存中的,smarty是存到硬盘上的,读数据肯定是从内存中读取快,你看哈这2个的原理吧
这个我知道啊。。
你的一色就是说:memcache比smarty静态缓存要快,对吗?
既然smarty可以cache了。为什么还要用 memcache ?
这个道理很简单:由于运行机制和适用范围的不同,smarty 只被少数初级php程序员使用;而 memcache 被广泛的采纳,并由此衍生出基于内存的数据库系统
既然smarty可以cache了。为什么还要用 memcache ?
那是两种优化一般不一块使吗?
这个道理很简单:由于运行机制和适用范围的不同,smarty 只被少数初级php程序员使用;而 memcache 被广泛的采纳,并由此衍生出基于内存的数据库系统
啊?静态页缓存现在不是挺流行的吗?
一个是针对数据,一个针对的被访问的页面,例如最长用的方式将查询出来的条数据存入memcache,而有些页面实时刷新要求不高的那么就smarty的缓存了,作用的范围不同,就像你吃了胡萝卜还要吃西瓜差不多,吃胡萝卜是增加维生素C,吃西瓜是增加维生素D,这个如果还迷糊,你可以先不必纠结,等以后慢慢就知道了
一个是针对数据,一个针对的被访问的页面,例如最长用的方式将查询出来的条数据存入memcache,而有些页面实时刷新要求不高的那么就smarty的缓存了,作用的范围不同,就像你吃了胡萝卜还要吃西瓜差不多,吃胡萝卜是增加维生素C,吃西瓜是增加维生素D,这个如果还迷糊,你可以先不必纠结,等以后慢慢就知道了
嗯,那比如现在有一个页面,要求5分钟一刷新就可以,其中有三条从数据库获取的结果集。
那我就将这个页面设置成5分钟静态缓存更新一次。
比如这种情况,那用不用memcache不是一样的吗?
引用 7 楼 的回复:
一个是针对数据,一个针对的被访问的页面,例如最长用的方式将查询出来的条数据存入memcache,而有些页面实时刷新要求不高的那么就smarty的缓存了,作用的范围不同,就像你吃了胡萝卜还要吃西瓜差不多,吃胡萝卜是增加维生素C,吃西瓜是增加维生素D,这个如果还迷糊,你可以先不必纠结,等以后慢慢就知道了
嗯,那比如现在有一个页面,要求5分钟一刷新就可以,其中有三……
不一样,因为就算你页面缓存了,但是你每次刷新页面后台都要select数据库,只是前台页面没有变化而已,但是如果你用了memcache,例如时间也是5分钟,那么在这5分钟时间里是不会查询数据库的,这样数据库资源就节省了,是不是啊,而smarty的缓存不过是省下了解析模板变量的作用,其实这两者之间的关系并不太大,唯一共同点就是都叫缓存,其他的根本就不能进行对比
引用 8 楼 的回复:
引用 7 楼 的回复:
一个是针对数据,一个针对的被访问的页面,例如最长用的方式将查询出来的条数据存入memcache,而有些页面实时刷新要求不高的那么就smarty的缓存了,作用的范围不同,就像你吃了胡萝卜还要吃西瓜差不多,吃胡萝卜是增加维生素C,吃西瓜是增加维生素D,这个如果还迷糊,你可以先不必纠结,等以后慢慢就知道了
嗯,那比如现在有一个页面,……
啊???
smarty不是有一个判断当前页面是否缓存了的函数吗:is_cached()
用它判断一下,如果已经有缓存了且没过期,就不用查数据库了啊,直接读静态文件了。
两个不同的东西...像kyzy说的。虽然都说是为缓存服务,但是缓存的具体对象和实现方法不太一样。虽然经过各种SM后也能够彼此通融些,但是就有点脱裤子了。
简单说smarty缓存最终的结果.memcache缓存中间的部分.当然这样说也比较笼统,但多少你能知道他们不是为了解决相同问题的交集。
smarty 的 cache 是基于文件的,可称为 filecache
访问文件肯定要比访问内存要慢
所以才有 smarty + memcache 一说
也就是说可以修改 smarty 将 cache 放到 memcache 中去
至于用什么,怎么用,那都是方案问题。与实现技术无关
啊???
smarty不是有一个判断当前页面是否缓存了的函数吗:is_cached()
用它判断一下,如果已经有缓存了且没过期,就不用查数据库了啊,直接读静态文件了。
你总不能每个方法都判断吧
嗯大家说的这两个东西的区别我了解了,谢谢大家!
但是,我现在最困惑的就是不知道在什么情况下两者可以配合用,就比如我刚才说的那个例子:
有一个页面,要求每5分钟刷新一次,其中有三条从数据库获取的结果集。
我将这个页面用smarty设置静态缓存,且缓存周期是5分钟。
然后用smarty的is_cached()方法判断是否有缓存且未过期,如果条件成立,就可以直接读取静态文件,反之则重新获取值。
那像这种情况,即便用memcache保存这三条结果集,是不是也没什么效果了?
那什么情况两者能配合着用呢?我只是想知道一个小例子。
谢谢大家!
引用 10 楼 的回复:
啊???
smarty不是有一个判断当前页面是否缓存了的函数吗:is_cached()
用它判断一下,如果已经有缓存了且没过期,就不用查数据库了啊,直接读静态文件了。
你总不能每个方法都判断吧
你是指的在每个控制器的方法里吗?
我觉得可以用吧~~~~每个方法里都用有什么不好的地方吗?
其实就是缓存存储位置的区别,当你is_cached()判断可以读取缓存之后,smarty就会去读缓存,问题是这个缓存在磁盘上,而磁盘是个比较慢的东西,当访问量很大时,大量的磁盘读取就会堵塞,系统的性能就会大幅下降.而memcache在内存中,比磁盘要快上几个数量级,不太会堵塞.

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)