日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

session和cache的区别

發(fā)布時(shí)間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 session和cache的区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。

以前實(shí)現(xiàn)數(shù)據(jù)的緩存有很多種方法,有客戶(hù)端的Cookie,有服務(wù)器端的Session和Application

其中Cookie是保存在客戶(hù)端的一組數(shù)據(jù),主要用來(lái)保存用戶(hù)名等個(gè)人信息。

Session則保存對(duì)話(huà)信息。Application則是保存在整個(gè)應(yīng)用程序范圍內(nèi)的信息,相當(dāng)于全局變量。

Session

Session用來(lái)保存每一個(gè)用戶(hù)的專(zhuān)有信息

Session的生存期是用戶(hù)持續(xù)請(qǐng)求時(shí)間加上一段時(shí)間(一般是20分鐘左右)

Session信息是保存在Web服務(wù)器內(nèi)存中的,保存數(shù)據(jù)量可大可小
由于用戶(hù)停止使用應(yīng)用程序之后它仍在內(nèi)存中存留一段時(shí)間,因此這種方法效率較低

代碼:

Session[“UserID”]=”test”;
String UserName=Session[“UserID”].ToString();

Cookie

Cookie用來(lái)保存客戶(hù)瀏覽器請(qǐng)求服務(wù)器頁(yè)面的請(qǐng)求信息

我們可以存放非敏感的用戶(hù)信息,保存時(shí)間可以根據(jù)需要設(shè)置

如果沒(méi)有設(shè)置Cookie失效日期,它的生命周期保存到關(guān)閉瀏覽器為止

Cookie對(duì)象的Expires屬性設(shè)置為MinValue表示永不過(guò)期

Cookie存儲(chǔ)的數(shù)據(jù)量受限制,大多數(shù)的瀏覽器為4K因此不要存放大數(shù)據(jù)

由于并非所有的瀏覽器都支持Cookie,數(shù)據(jù)將以明文的形式保存在客戶(hù)端

代碼:

Resopnse.Cookies[“UserID”]=”test”;
String UserName= Resopnse.Cookies [“UserID”].ToString();

Cache

Cache用于在Http請(qǐng)求期間保存頁(yè)面或者數(shù)據(jù)

Cache的使用可以大大的提高整個(gè)應(yīng)用程序的效率

它允許將頻繁訪(fǎng)問(wèn)的服務(wù)器資源存儲(chǔ)在內(nèi)存中,當(dāng)用戶(hù)發(fā)出相同的請(qǐng)求后,服務(wù)器不是再次處理而是將Cache中保存的數(shù)據(jù)直接返回給用戶(hù)

可以看出Cache節(jié)省的是時(shí)間—服務(wù)器處理時(shí)間

Cache實(shí)例是每一個(gè)應(yīng)用程序?qū)S械?#xff0c;其生命周期==該應(yīng)用程序周期

應(yīng)用程序重啟將重新創(chuàng)建其實(shí)例

注意:如果要使用緩存的清理、到期管理、依賴(lài)項(xiàng)等功能必須使用Insert 或者Add方法方法添加信息

代碼:

Cache[”ID”]=”cc”;或者Cache.Insert(“ID”,”test”);
String ID =Cache[“ID”].ToString();

通常使用最頻繁的是Session,那么Session和Cache又有什么區(qū)別呢?

Session緩存和Cache緩存的區(qū)別。

(1)最大的區(qū)別是Cache提供緩存依賴(lài)來(lái)更新數(shù)據(jù),而Session只能依靠定義的緩存時(shí)間來(lái)判斷緩存數(shù)據(jù)是否有效。

(2)即使應(yīng)用程序終止,只要Cache.Add方法中定義的緩存時(shí)間未過(guò)期,下次開(kāi)啟應(yīng)用程序時(shí),緩存的數(shù)據(jù)依然存在。而Session緩存只是存在于一次會(huì)話(huà)中,會(huì)話(huà)結(jié)束后,數(shù)據(jù)也就失效了。

(3)Session容易丟失,導(dǎo)致數(shù)據(jù)的不確定性,而Cache不會(huì)出現(xiàn)這種情況。

(4)由于Session是每次會(huì)話(huà)就被加載,所以不適宜存放大量信息,否則會(huì)導(dǎo)致服務(wù)器的性能降低。而Cache則主要用來(lái)保存大容量信息,如數(shù)據(jù)庫(kù)中的多個(gè)表。

(5)Session目前只能保存在內(nèi)存中,對(duì)其性能有影響。

?

?

Session:為當(dāng)前用戶(hù)會(huì)話(huà)提供信息。還提供對(duì)可用于存儲(chǔ)信息的會(huì)話(huà)范圍的緩存的訪(fǎng)問(wèn),以及控制如何管理會(huì)話(huà)的方法。它存儲(chǔ)在服務(wù)器的內(nèi)存中,因此與在數(shù)據(jù)庫(kù)中存儲(chǔ)和檢索信息相比,它的執(zhí)行速度更快。與不特定于單個(gè)用戶(hù)會(huì)話(huà)的應(yīng)用程 序狀態(tài)不同,會(huì)話(huà)狀態(tài)應(yīng)用于單個(gè)的用戶(hù)和會(huì)話(huà)。因此,應(yīng)用程序狀態(tài)非常適合存儲(chǔ)那些數(shù)量少、隨用戶(hù)的變化而變化的常用數(shù)據(jù)。而且由于其不發(fā)生服務(wù)器-客戶(hù) 端數(shù)據(jù)傳輸,Session還適合存儲(chǔ)關(guān)于用戶(hù)的安全數(shù)據(jù),如購(gòu)物車(chē)信息。

?

Session的關(guān)鍵特性有:存儲(chǔ)于服務(wù)器內(nèi)存中,與會(huì)話(huà)相關(guān),在會(huì)話(huà)的整個(gè)生存期中存在即不會(huì)被主動(dòng)丟棄,不被序列化,不發(fā)生服務(wù)器-客戶(hù)端數(shù)據(jù)傳輸。
??????Cache:它存儲(chǔ)于 服務(wù)器的內(nèi)存中,允許您自定義如何緩存項(xiàng)以及將它們緩存多長(zhǎng)時(shí)間。例如,當(dāng)缺乏系統(tǒng)內(nèi)存時(shí),緩存會(huì)自動(dòng)移除很少使用的或優(yōu)先級(jí)較低的項(xiàng)以釋放內(nèi)存。該技術(shù) 也稱(chēng)為清理,這是緩存確保過(guò)期數(shù)據(jù)不使用寶貴的服務(wù)器資源的方式之一。它不與會(huì)話(huà)相關(guān),所以它是多會(huì)話(huà)共享的,因此使用它可以提高網(wǎng)站性能,但是可能泄露 用戶(hù)的安全信息,還由于在服務(wù)器缺乏內(nèi)存時(shí)可能會(huì)自動(dòng)移除Cache因此需要在每次獲取數(shù)據(jù)時(shí)檢測(cè)該Cache項(xiàng)是否還存在。 Cache的關(guān)鍵特性有:存儲(chǔ)于服務(wù)器內(nèi)存中,與會(huì)話(huà)無(wú)關(guān),根據(jù)服務(wù)器內(nèi)存資源的狀況隨時(shí)可能被丟棄,不被序列化,不發(fā)生服務(wù)器-客戶(hù)端數(shù)據(jù)傳輸。

Cookie:Cookie 提供了一種在 Web 應(yīng)用程序中存儲(chǔ)用戶(hù)特定信息的方法。例如,當(dāng)用戶(hù)訪(fǎng)問(wèn)您的站點(diǎn)時(shí),您可以使用 Cookie 存儲(chǔ)用戶(hù)首選項(xiàng)或其他信息。當(dāng)該用戶(hù)再次訪(fǎng)問(wèn)您的網(wǎng)站時(shí),應(yīng)用程序便可以檢索以前存儲(chǔ)的信息。在開(kāi)發(fā)人員以編程方式設(shè)置Cookie時(shí),需要將自己希望保 存的數(shù)據(jù)序列化為字符串(并且要注意,很多瀏覽器對(duì)Cookie有4096字節(jié)的限制)然后進(jìn)行設(shè)置。

Cookie的關(guān)鍵特性有:存儲(chǔ)于客戶(hù)端硬盤(pán)上,與用戶(hù)相關(guān),在一定時(shí)間內(nèi)持久化存儲(chǔ),可以跨瀏覽器共享數(shù)據(jù),需要被序列化,發(fā)生服務(wù)器-客戶(hù)端數(shù)據(jù)傳輸。 下面這個(gè)問(wèn)題很有啟發(fā)性: 最近小組的同事很喜歡用Session做頁(yè)面跳轉(zhuǎn),具體就是在查詢(xún)頁(yè)面把查詢(xún)結(jié)果放到DataTable中,用Session存儲(chǔ)這個(gè)dataTable,讀取到數(shù)據(jù)之后再子頁(yè)面做Session清除,這樣對(duì)性能有沒(méi)有什么影響?
1、session:session的確是存放在服務(wù)器的內(nèi)存中(但不是4k上限,具體大小限制應(yīng)該是服務(wù)器內(nèi)存),而且同一個(gè)sessionid的多個(gè) http請(qǐng)求會(huì)排隊(duì),也就是session對(duì)于同一個(gè)瀏覽器來(lái)說(shuō)是同步的,用不好會(huì)極大影響性能。另外,session依賴(lài)于客戶(hù)端cookie,因?yàn)?sessionid是存放在客戶(hù)端瀏覽器進(jìn)程cookie中的,因此不支持cookie的瀏覽器,session也會(huì)丟失(session url重寫(xiě)可部分解決這個(gè)問(wèn)題,可參考:http://www.sungness.com/archives/48)。因此不建議用。

2、cookie,也不建議存放datatable這樣的“大數(shù)據(jù)”。因?yàn)閏ookie不僅有4k上限,并且不是“純存放在客戶(hù)端”這么簡(jiǎn)單,要知道 cookie的值在每次web頁(yè)面請(qǐng)求往返的過(guò)程中都是要附帶在http頭中的,如果太大會(huì)占用服務(wù)器和客戶(hù)端之間的網(wǎng)絡(luò)帶寬(雖然只是4k,但在線(xiàn)人多 了可就是4k?*?n了)。對(duì)于b/s結(jié)構(gòu)的應(yīng)用來(lái)說(shuō),網(wǎng)絡(luò)帶寬是性能最主要的瓶頸之一!另外,對(duì)于datatbale轉(zhuǎn)換成json字符串再存入 cookie,服務(wù)器CPU也會(huì)消耗。最可怕的是,一但你的cookie忘記刪除了,那么在其有效期和作用域內(nèi),用戶(hù)訪(fǎng)問(wèn)你的所有頁(yè)面時(shí)都將攜帶這個(gè)4K 大小的http頭,那就悲劇了。10000在線(xiàn)人數(shù),4千兆網(wǎng)卡也不夠你花的。

3、數(shù)據(jù)庫(kù)連接,每次保存查詢(xún)語(yǔ)句然后再查詢(xún)的方式不錯(cuò),不過(guò)看你的查詢(xún)復(fù)雜度了,如果很費(fèi)時(shí)的查詢(xún),這樣調(diào)用也是不可取的。內(nèi)存和cpu的矛盾你要根據(jù) 實(shí)際情況作出選擇。對(duì)于具有連接池的應(yīng)用來(lái)說(shuō),一次連接數(shù)據(jù)的成本并不高,經(jīng)過(guò)測(cè)試差不多=10次調(diào)用取當(dāng)前系統(tǒng)時(shí)間函數(shù)。但查詢(xún)語(yǔ)句的復(fù)雜度就沒(méi)譜了。 另外,如果并發(fā)人數(shù)很多的情況下,頻繁占用數(shù)據(jù)庫(kù)連接,會(huì)導(dǎo)致連接池沒(méi)有可用連接了,那就又悲劇了。此時(shí)就不是一次連接的成本,系統(tǒng)整體性能將毀滅性的下 降,反應(yīng)遲鈍。

4、cache:一個(gè)不錯(cuò)的選擇,不過(guò)它可同樣是占用服務(wù)器內(nèi)存哦,只是比session多了一些靈活性。不過(guò)我也不建議你用于存放傳遞參數(shù)的地方。要知 道session就算內(nèi)存滿(mǎn)了也不會(huì)丟失你的參數(shù)值(會(huì)拋異常),可cache可不是,它會(huì)直接刪掉你的參數(shù)值,甚至內(nèi)存極度不足時(shí)都不會(huì)讓你進(jìn)去(也不 會(huì)報(bào)錯(cuò))。換句話(huà)說(shuō),可能上一行代碼剛存進(jìn)去,下一行代碼去讀就丟了。很可怕吧~

5、form表單:最為提倡的方式,http協(xié)議中原本頁(yè)面間傳值的方法就是這樣的,只是有時(shí)不太方便,能用之則用之。 6、自定義存儲(chǔ)機(jī)制:如果你對(duì)性能要求很苛刻,或者非要精益求精的話(huà)。那么還是自己寫(xiě)一個(gè)存儲(chǔ)機(jī)制吧。例如我自己就是寫(xiě)了自己的XSession對(duì)象,它 的用法與session使用類(lèi)似,但是存儲(chǔ)機(jī)制都是我自己封裝的,既有cache的優(yōu)點(diǎn)、又有session的優(yōu)點(diǎn),還有數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)、性能看你寫(xiě)的算法 了、而且具有更大的使用靈活性。缺點(diǎn)就是需要你自己coding

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的session和cache的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。