AssetBundle使用,卸載,校驗
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
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小時內刪除侵權內容。