都说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在内存中,比磁盘要快上几个数量级,不太会堵塞.

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

禪工作室 13.0.1
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具