數據庫緩存層

一 ?常見的緩存形式 :

1.文件緩存 (為了避免I/O開銷,盡量使用內存緩存)

2.內存緩存

?

二 為什么要使用緩存

緩存數據是為了讓客戶端很少甚至不訪問數據庫服務器進行的數據查詢,高并發下,能最大程度降低對數據庫服務器的訪問壓力

一般的數據請求:

用戶請求->數據查詢->連接數據庫服務器并查詢數據->將數據緩存起來(緩存方式: HTML , 內存 , [JSON, 序列化數據不做考慮])->顯示給客戶端

用戶再次請求或者新用戶訪問->數據查詢->直接從緩存中獲取數據->顯示給客戶端

?

三 緩存需要考慮的方面

1.緩存方式的選擇: 對I/O開銷比較小的方式, 比如緩存到內存

2.緩存場景的選擇: 一些不經常修改的數據適合做緩存

3. 緩存數據的實時性:?

4. 緩存數據的穩定性:?

?

四 ?Mysql的查詢緩存

1.啟用mysql查詢緩存:

--(1) query_cache_type : 0代表使用查詢緩存 1表示始終使用查詢緩存 2表示按需使用查詢緩存

--(2) 如果選擇1也就是始終緩存時,如果某一條sql語句不想使用緩存,可以這樣

select SQL_NO_CACHE * from student where condition;

--(3) 如果選擇2也就是按需使用查詢緩存時,可以這樣

select SQL_CACHE *from student where condition;

2. query_cache_size 配置項

默認情況下,query_cache_size為0,也就是表示為查詢緩存預留的內存為0,表示無法使用查詢緩存

(1) 可以通過 set GLOBAL query_cache_size= 來臨時設置

(2) 也可以在配置文件中,直接設置query_cache_size的大小

3. 查詢緩存可以看做是SQL文本和查詢結果的映射

第二次查詢的sql和第一次查詢的sql完全相同,則會使用緩存

4. 我們可以通過show status like 'Qcache_hits'; 命令來查看命中次數

5. 在mysql數據緩存中,除了sql語句改變會使緩存無法使用,當表的結構或數據發生改變時,查詢緩存中的數據也不再有效

總結:如果寫的頻率較高,mysql查詢緩存意義就不大,如果數據基本不發生改變,mysql查詢緩存還是比較有用的

6.清理緩存

FLUSH QUERY CACHE; //清理查詢里的緩存內存碎片

RESET QUERY CACHE; //從查詢緩存中移出所有查詢

FLUSH TABLES; //關閉所有打開的表,同時該操作將會清空查詢緩存中的內容

?

五 使用Memcache 緩存查詢數據

?

1.memcache的概念

?memcache是一套分布式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用以提升網站的訪問速度,尤其對于一些大型的、需要頻繁訪問數據庫的網站訪問速度提升效果十分顯著 。

?

2.memcache 的工作原理

Memcache是一個高性能的分布式的內存對象緩存系統,通過在內存里維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然后從內存中讀取,從而大大提高讀取速度

?

3. memcache工作流程

先檢查客戶端的請求數據是否在memcached中,如有,直接把請求數據返回,不再對數據庫進行任何操作;如果請求的數據不在memcached中,就去查數據庫,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份到memcached中

?

4.memcache的安裝

如果沒有以下memcache文件,點擊鏈接下載

(1) 首先,獲取memcached.exe以及msvcr71.dll(這是memcache的依賴文件),如圖

?

?

(2) 在memcached所在目錄的命令行下運行memcached.exe

(3)檢查任務管理器, 驗證memcached是否已經開始運行

如果任務進程出現這樣的圖標,說明memcached已經在運行了,到這里結束!

?

當然,這種運行方式使用上不是太方便,每次還要在命令行上運行,所以,有另一種方式讓memcached運行而不用每次都開啟cmd窗口,見下文

(2) ?以管理員身份運行cmd,將memcached安裝到服務上(將上面的第(2)步替換掉 )

(3) 查看服務中是否有memcached(將上面的第(3)步替換掉 )

將其啟動即可

?

注意:如果想要從服務中卸載掉memcached,需要先將memcached服務停止,然后再命令行下輸入如下命令即可卸載

?

5. 在php中操作memcache(需要安裝memcache拓展,安拓展是一個php程序員最基礎的東西,這里不贅述了)

(1) 連接memcache

?

$mem = new memcache();
$re=$mem->connect('localhost', 11211);
if($re){echo '連接memcache成功';
}else{echo '連接失敗';
}

瀏覽器輸出:連接memcache成功 ?證明連接memcache成功

?

?

(2) 現在,可以操作memcache數據庫了

具體方法可以參考memcache文檔?,?memcached文檔

(3) 使用遠程協議進行連接memcache的幾種方式

第一種:可以開啟telnet,然后在cmd命令行模式下使用telnet遠程連接memcache

第二種:使用putty(支持telnet的客戶端)

第三種: ?圖形界面客戶端

第四種: phpmemcache 服務器狀態軟件

第五種: memadmin php管理memcache的客戶端 (推薦)?鏈接

6.?memcache在項目中的具體應用?

?

六 使用redis緩存查詢數據

?-----以后再補-----

?

七 Redis 與 Memcache 的區別

1. 性能相差不大

2. Redis可以持久化數據,Memcache不行

3. Redis 的數據結構很豐富, memcache相對較少

4. Redis依賴客戶端實現分布式讀寫

5. Memcache本身沒有數據的冗余機制

6. Redis支持快照,AOF, 依賴快照進行持久化, aof增強了可靠性的同時,對性能有所影響

7. memcache不支持持久化,通常做緩存提升性能

8. memcache在并發場景下,用cas保持一致性,redis事物支持比較弱,只能保證事物中的每個操作連續執行

9. redis用于數據量較小的高性能操作和運算上; memcache用于在動態系統中減少數據庫負載,提升性能

?

八 緩存其他數據

Session ?

session_set_save_handle

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282612.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282612.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python面試題~反射,元類,單例

1 什么是反射?以及應用場景? test.py def f1():print(f1) def f2():print(f2) def f3():print(f3) def f4():print(f4) a 1 復制代碼import test as ss ss.f1() ss.f2() print(ss.a) 復制代碼我們要導入另外一個模塊,可以使用import.現在有這樣的需求,我…

僅有50Mb大小的cli即可搞定大廠才能玩的CloudIDE丨SmartIDE

作者:徐磊,開源云原生SmartIDE創始人、LEANOSFT創始人/首席架構師/CEO,微軟最有價值專家MVP/微軟區域技術總監Regional Director,華為云最有價值專家。從事軟件工程咨詢服務超過15年時間,為超過200家不同類型的企業提供…

idea-spark-sbt 打包jar

1、打開idea下的terminal窗口 2、只打包部分項目 sbt insight-import/clean insight-import/assembly 這表示只打包主目錄下的insight-import項目 ,先清理(clean)再打包(assembly)不能用package,這個不會打…

操作Checkbox標簽

在前端開發中,少不了對Checkbox的操作。 常用的的方法有2個:.is()和.prop()方法。前者是判斷 checkbox的狀態,選不是未選。而后者為checkbox設置一個值,可以設置checkbox是true還是false。寫個小例子,練習一下&#xf…

memcache在項目中的應用

一 安裝memcache 具體流程這篇文章有寫到: 點擊 鏈接 二 在項目中應用memcache 為了減輕數據庫的查詢壓力,所以我們把一些不經常變動的數據進行緩存,用戶查詢時,如果查詢的要求是一樣的,我們就memcache緩存中讀取數據并返回去,如果查詢要求變了,我們再到數據庫中查詢,并將查…

點擊回退按鈕刷新頁面

瀏覽器用戶返回上一步&#xff0c;自動刷新window.οnunlοadfunction(){} 這個最簡單粗暴 方式一、<input type"hidden" id"refreshed" value"no"><script type"text/javascript">οnlοadfunction(){var edocument.getE…

Dapr 證書過期了怎么辦? 別慌,有救!

一、背景Dapr 默認證書有效時間是1年&#xff0c;證書過期后就不能執行相關控制面和數據面的交互了&#xff0c;如下圖&#xff1a;二、查看證書有效時間通過dapr mtls expiry 看到期時間&#xff0c;具體參見命令https://v1-7.docs.dapr.io/reference/cli/dapr-mtls/dapr-mtls…

python數據類型之間的轉換

對python內置的數據類型進行轉換時&#xff0c;可以使用內置函數&#xff0c;常用的類型轉換函數如下 python常用類型轉換函數函數格式使用示例描述int(x [,base])int("8") 可以轉換的包括String類型和其他數字類型&#xff0c;但是會丟失精度 float(x) float…

js高級程序設計的筆記(一)

2019獨角獸企業重金招聘Python工程師標準>>> 1.js中的 null : 如果只意在保存對象的變量還沒有真正的保存對象之前&#xff0c;就需要先把該變量保存 null值&#xff0c; null代表空對象的指針 2.函數的參數對象 arguments的理解。 argument對象的length屬性 實例 f…

Redis在PHP項目中的應用

一 運行redis服務端 出現上圖的圖形,就說明redis服務端開啟成功,并且開啟了密碼功能(如果不加載配置文件,連接redis是不需要密碼的,這樣,會給我們的程序帶來很大隱患) 密碼的設置: 在redis配置文件中,搜索requirepass ,后面設置密碼 比如 : requirepass G506myredis 則表示此…

Linux關機、重啟命令

關機shutdown -h 0 #<O秒后關機shutdown -h now #<現在關機shutdown -h 10 #<10分鐘后關機shutdown -h 23:20 #<23&#xff1a;20分關機shutdown -c #<取消shutdown關機命令init 0 #<立馬關機&#xff08;切換運行級別為0&#xff0c;推薦使用&#xff09;ha…

Python 模塊之 string.py

用法 字符串常量&#xff1a; import string print(string.ascii_lowercase) print(string.ascii_uppercase) print(string.ascii_letters) print(string.digits) print(string.hexdigits) print(string.octdigits) print(string.punctuation) print(string.printable)結果 abc…

md5和password_hash孰好孰壞

md5自不必說,想必所有phper都用過,但另一個加密函數不知道你見過沒有 他就是password_hash(); 加密方式更全面.使用起來也比md5salt這種方式要簡潔很多,最主要的是難破解,因為它每時每刻都在變動 它的使用方式大致是這樣 1. 用戶注冊時提交過來密碼,我們對用戶密碼進行加密…

Logstash 命令行參數

Logstash 提供了一個 shell 腳本叫 logstash 方便快速運行。它支持以下參數&#xff1a; -e意即執行。我們在 “Hello World” 的時候已經用過這個參數了。事實上你可以不寫任何具體配置&#xff0c;直接運行 bin/logstash -e ” 達到相同效果。這個參數的默認值是下面這樣&…

上汽拒絕HW符合商業邏輯

不久前&#xff0c;上汽董事長陳虹表示“與HW合作自動駕駛是不可接受的。這就好比一家公司為我們提供整體的解決方案&#xff0c;如此一來&#xff0c;它就成了靈魂&#xff0c;而上汽就成了軀體。對于這樣的結果&#xff0c;上汽是不能接受的&#xff0c;要把靈魂掌握在自己手…

javac compiling error ( mising package)

javac 編譯java源文件時&#xff0c;提示 package does not exist 的錯誤 Test.java import java.security.MessageDigest; import org.apache.commons.codec.binary.Hex;public class Test{public static void main(String args[]){boolean isAlarmed true;boolean aa isAla…

使用ffmpeg錄音

官方教程&#xff1a;http://ffmpeg.org/ffmpeg.html 錄音方法&#xff1a; 開始找到了這個方法&#xff0c;但是不行呀&#xff0c;好像是沒有這個oss吧。 oss 是linux 下的聲音相關的東西&#xff0c;與alsa 一樣&#xff0c;不過oss 是商業的&#xff0c; 而/dev/dsp 是oss …

Mysql慢查詢日志的使用 和 Mysql的優化

一、生成實驗數據 原理&#xff1a;sql 蠕蟲復制&#xff08;這種生成數據方式同樣適用于數據表中有主鍵的情況&#xff09;。 insert into comic (name,pen_name,cover) select name,pen_name,cover from comic 二、慢查詢日志設置 當語句執行時間較長時&#xff0c;通過日…

Oracle 12C CDB、PDB常用管理命令

--查看PDB信息&#xff08;在CDB模式下&#xff09; show pdbs --查看所有pdb select name,open_mode from v$pdbs; --v$pdbs為PDB信息視圖 select con_id, dbid, guid, name , open_mode from v$pdbs; --切換容器 alter session set containerorcl1 --切換到PDBorcl1容器…

指定時間的月初和月末一天的寫法

DateTime dt Convert.ToDateTime("2017-2");DateTime FirstDay new DateTime(dt.Year, dt.Month, 1);//本月初1號DateTime LastDay new DateTime(dt.AddMonths(1).Year, dt.AddMonths(1).Month, 1).AddDays(-1);//下月初1號減一天本月底 轉載于:https://www.cnblo…