PHP如何解決網站大流量與高并發的問題(二)

      網友投稿 725 2025-04-06

      轉載:https://zhyunfe.github.io/2017/10/02/php-interview-prepare-hc-2/


      數據庫緩存

      相關概念

      什么是數據庫緩存?

      為什么使用緩存

      使用MySQL查詢緩存

      使用Memcache緩存

      使用Redis緩存

      Mysql等一些常見的關系型數據庫的數據都存儲在磁盤中,在高并發場景下,業務應用對mysql產生的增刪改查的操作造成巨大的I/O開銷和查詢壓力,這無疑對數據庫和服務器都是一種巨大的壓力,為了解決此類問題,緩存數據的概念應運而生

      數據庫緩存極大的解決數據庫服務器的壓力

      提高應用數據的響應速度

      常見的緩存形式:內存緩存、文件緩存,為了避免I/O開銷,推薦使用內存緩存

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

      用戶請求–>數據查詢–>連接數據庫服務器并查詢數據–>將數據緩存起來(HTML,內存,JSON,序列化數據)–>顯示給客戶端

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

      緩存方式的選擇

      緩存場景的選擇

      緩存數據的實時性

      緩存數據的穩定性

      啟用mysql查詢緩存:

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      PHP如何解決網站大流量與高并發的問題(二)

      14

      15

      16

      query_cache_type

      #查詢緩存類型有0,1,2三個取值。0表示不使用緩存,1表示始終使用查詢緩存,2表示按需使用查詢緩存

      query_cache_type = 1

      #此時也可以關閉查詢緩存

      select sql_no_cache * from table where condition;

      query_cache_type = 2

      # 按需查詢緩存

      select sql_cache * from table where condition

      query_cache_size

      #默認情況下的query_cache_size為0,表示為查詢緩存預留的內存位0,則無法使用查詢緩存

      set global query_cache_size = 133443344;

      # 設置query_cache_size的大小

      查詢緩存可以看做是sql文本和查詢結構的映射

      第二次查詢的sql和第一次查詢的sql必須完全相同才會使用緩存

      show status like ‘Qcache_hits’ 查看命中次數

      表的結構或者數據發生改變時,查詢緩存中的數據不再有效

      清理緩存

      flush query cache;清理查詢緩存內存碎片

      reset qyery cache;從查詢緩存中移除所有查詢

      flush tables;關閉所有打開的表,同時該操作將會清空表緩存的內容

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

      工作原理

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

      工作流程

      先檢查客戶端的請求數據是否在mem中,有的話直接返回,不在的話就去查庫,把數據庫中的數據返回給客戶端,同時緩存到mem中

      方法

      獲取: get(key)

      設置:set(key)

      刪除:delete(key)

      Redis緩存查詢數據

      與memcache的區別

      性能差別不大

      Redis在2.0版本后增加了自己的VM特性,突破了物理內存的限制,mem可以修改最大可用內存,采用LRU算法

      Redis依賴客戶端實現分布式讀寫,mem本身沒有數據冗余機制,Redis支持(快照,AOF),依賴快照進行持久化,aof增強了可靠性的同時對性能有所影響

      mem不支持持久化,在并發情境下用cas保證一致性,redis事務支持較弱,Redis支持多種類的數據類型

      Redis用于數據量小的高性能的操作和運算上,mem用于在動態系統中減少數據庫負載,提升性能,適合做緩存,提高性能

      Session

      將session存入到數據庫來說是一種逆天的行為,可以存儲到mem和redis中

      session_set_save_handler來修改存儲地址

      MySql數據庫層的優化

      相關概念

      優化方向

      優化方案

      優化方向

      數據表結構設計的優化

      數據表數據類型的優化

      字段使用什么樣的數據類型更合適

      1

      2

      3

      4

      tinyint(0-255)、smallint、bigint(存儲上千萬的數字)#考慮空間的問題,考慮范圍的問題,按需取

      char、varchar #考慮字符串長度是否固定

      enum #特定、固定的分類可以使用enum存儲,效率更快

      IP地址的存儲#ip2long將ip轉換成長整型,long2ip

      存儲引擎的優化

      建立合適的索引,在什么時候效率最好?

      索引的創立原則: 不是越多越好,在合適的字段上創建合適的索引

      復合索引的前綴的原則,like 查詢%的問題,全表掃描優化,or條件索引使用情況,字符串類型索引失效問題

      數據庫服務器架構的優化

      分區操作

      PHP Redis 網站

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel2007表格鎖定的教程(excel表格鎖定怎么操作)
      下一篇:如何在wps表格中輸入打鉤特殊符號(wps打鉤符號怎么輸入)
      相關文章
      亚洲熟女乱色一区二区三区| 亚洲黄色激情视频| 亚洲爆乳AAA无码专区| 亚洲AV无码专区在线亚| 亚洲大香伊人蕉在人依线| 亚洲专区先锋影音| 久久精品国产亚洲AV无码娇色 | 亚洲AV无码久久寂寞少妇| 亚洲人成无码网站| 亚洲女初尝黑人巨高清| 亚洲精品狼友在线播放| 亚洲乱码日产一区三区| 黑人精品videos亚洲人| 国产亚洲精品a在线观看app| 国产精品亚洲片在线| 亚洲成色WWW久久网站| 亚洲AV无码国产精品麻豆天美 | 激情小说亚洲图片| 国产亚洲视频在线| 亚洲熟伦熟女新五十路熟妇| 国产亚洲精品无码拍拍拍色欲 | 亚洲国产理论片在线播放| 亚洲午夜国产精品| 久久久久亚洲国产| 亚洲成AV人片高潮喷水| 亚洲AⅤ永久无码精品AA| 亚洲天堂中文字幕在线| 亚洲色精品aⅴ一区区三区| 亚洲国产精品人久久| 亚洲熟妇av一区二区三区下载 | 人人狠狠综合久久亚洲婷婷| 亚洲精品无码午夜福利中文字幕| 久久久久亚洲爆乳少妇无| 亚洲人色婷婷成人网站在线观看| 久久久青草青青亚洲国产免观| 亚洲激情在线视频| 亚洲免费视频播放| 亚洲另类无码一区二区三区| 国产亚洲福利精品一区二区| 亚洲中文久久精品无码ww16| 亚洲国产精品国自产拍电影|