1. Redis持久化策略
問:
如果不小心在公司的服務器中執行了flushAll命令,該怎么辦?
答:
需要找到.aof檔案之后,洗掉flushAll命令,之后重啟redis,再執行save命令,資料即可恢復,
決議:
1.1 什么是持久化
說明:Redis運行環境是在記憶體中,如果redis服務器關閉,則記憶體資料將會丟失,
為了保存記憶體資料,我們需要定期將記憶體資料持久化到磁盤中,
持久化策略規則:
當redis正常運行時,定期的將資料保存到磁盤中;當redis服務器重啟時,會根據組態檔中指定的持久化方式,實作資料的恢復(讀取資料,然后恢復資料)
1.2 RDB模式
特點說明:
1)RDB模式是redis默認的策略
2)RDB模式能夠定期持久化,弊端:可能導致資料的丟失
3)RDB模式記錄的是記憶體資料的快照,持久化效率較高,快照只保留最新的記錄
命令說明:
1)save:將記憶體資料持久化到磁盤中 主動的操作 會造成執行緒阻塞
2)bgsave: 將記憶體資料采用后臺運行的方式,持久化到檔案中. 不會造成阻塞.
3)默認的持久化的機制
save 900 1 如果在900秒內,執行了1次更新操作,則持久化一次
save 300 10 如果在300秒內,執行了10次更新操作,則持久化一次
save 60 10000 如果在60秒內,執行了10000次更新操作,則持久化一次
1.3 AOF模式
特點說明:
1)AOF模式默認條件下是關閉的,需要手動開啟
2)AOF模式記錄的是用戶的操作程序,所以可以實作實時持久化操作
3)AOF模式由于記錄的是實時的操作程序,所以持久化檔案較大,需要定期維護
1.3 總結
1)當記憶體資料允許少量丟失時,采用RDB模式 (快)
2)當記憶體資料不允許丟失時,采用AOF模式(定期維護持久化檔案)
3)一般在作業中采用 RDB+AOF模式共同作用,保證資料的有效性
2. Redis快取
由于快取失效,導致大量的用戶的請求,直接訪問資料庫服務器.導致負載過高,從而引發整體宕機的風險!!!
決議:
2.1 快取穿透
特點說明:
用戶頻繁訪問資料庫中不存在的資料,可能出現快取穿透的現象.如果該操作是高并發操作,則可能直接威脅資料庫服務器.
解決方案:
1)采用IP限流的方式 降低用戶訪問服務器次數. IP動態代理(1分鐘變一次)
2)微服務的處理方式: 利用斷路器回傳執行的業務資料即可不執行資料庫操作 從而保護了資料庫.
3)微服務處理方式: API網關設計. 不允許做非法操作
2.2 快取擊穿
特點說明:
由于redis中某個熱點資料由于超時/洗掉等操作造成資料失效,同時用戶高并發訪問該資料,則可能導致資料庫宕機,該操作稱之為快取擊穿
解決方案:
可以采用多級快取的設計,同時資料的超時時間采用亂數的方式
2.3 快取雪崩
特點說明:
由于redis記憶體資料大量失效,導致用戶的訪問命中率太低,大量的用戶直接訪問資料庫,可能導致資料庫服務器宕機,這種現象稱之為快取雪崩
解決方案:
1)采用多級快取
2)設定不同的超時時間
3)禁止執行 flushAll等敏感操作
3. Java與C有什么區別?
決議:
1)都是面向物件的語言,都支持封裝、繼承和多型
2)Java不提供指標來直接訪問記憶體,程式記憶體更加安全
3)Java 的類是單繼承的,C++ 支持多重繼承;雖然 Java 的類不可以多繼承,但是介面可以多繼承
4)Java 有自動記憶體管理機制,不需要程式員手動釋放無用記憶體
4. Java應用程式與小程式有什么區別?
決議:
簡單說應用程式是從主執行緒啟動(也就是 main() 方法),applet 小程式沒有main 方法,主要是嵌在瀏覽器頁面上運行(呼叫 init()執行緒或者 run()來啟動),嵌入瀏覽器這點跟 flash 的小游戲類似,
5. 字符型常量和字串常量的區別?
決議:
1)形式上: 字符常量是單引號引起的一個字符 字串常量是雙引號引起的若干個字符
2)含義上: 字符常量相當于一個整形值( ASCII 值),可以參加運算式運算 字串常量代表一個地址值(該字串在記憶體中存放位置)
3)占記憶體大小 字符常量只占 2 個位元組 字串常量占若干個位元組(至少一個字符結束標志) (注意: char 在 Java 中占兩個位元組)
6. 正向代理、反向代理(Nginx)?
決議:
2.1 反向代理
反向代理服務器位于用戶與目標服務器之間,但是對于用戶而言,反向代理服務器就相當于目標服務器,即用戶直接訪問反向代理服務器就可以獲得目標服務器的資源,同時,用戶不需要知道目標服務器的地址,也無需在用戶端做任何設定,反向代理服務器通常可用來作為WEB加速,即使用反向代理作為WEB服務器的前置機來降低網路he服務器的負載,提高訪問效率,
特點說明:
1、反向代理服務器位于用戶與目標服務器之間
2、對于用戶而言,以為代理服務器就是真實的服務器
3、反向代理機制保護了真實的服務器資訊
4、反向代理一般稱之為服務端代理
步驟:
1、當用戶發起請求時,該請求被代理服務器攔截
2、代理服務器查詢自己的組態檔,根據url地址獲取真實的服務器資訊
3、由代理服務器根據真實的服務器資訊,獲取資料
4、真實的服務器接受請求之后,將資料回傳給代理服務器
5、代理服務器接收服務器資料之后,將資料回傳給用戶,本次代理結束
2.2 正向代理
正向代理,一個位于客戶端可原始服務器之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容回傳給客戶端,客戶端才能使用正向代理,
特點說明:
1、代理服務器位于用戶與真實服務器之間
2、客戶非常清楚自己訪問的服務器是誰
3、服務器不清楚訪問自己的服務器是誰,以為只是代理服務器訪問
4、正向代理稱之為客戶端代理,保護了客戶的資訊
2.3 Nginx
Nginx 是一款輕量級的web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,其特點是占用記憶體少,并發能力強,事實上nginx的并發能力在同型別的網頁服務器中表現較好,中國大陸使用的nginx網站有:百度、京東、新浪、網易、騰訊、淘寶,
特點說明:
1、占用記憶體少,不超過2M
2、并發能力強(5萬/秒)、tomcat(150-220個/秒)
3、開發語言(C語言)
nginx.conf組態檔:
http{
#配置圖片的代理服務器
server{
listen 80;
server_name image.jt.com;
location / {
root D:/IdeaNew/images;
}
}
server{
......
}
}
http{
#配置后臺服務器
server{
listen 80;
server_name "監聽域名地址";
location / {
#1、代理真實服務器的地址
proxy_pass http://localhost:8081;
#2、映射到集群
proxy_pass http://jtWindows;
}
}
upstream jtWindows{
#max_fails=1 表示最大的失敗次數
#fail_timeout=60s 如果訪問不通,則在60s內,不會再次訪問故障機
server 127.0.0.1:8081 max_fails=1 fail_timeout=60s
server 127.0.0.1:8082 max_fails=1 fail_timeout=60s
server 127.0.0.1:8083 max_fails=1 fail_timeout=60s
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/227177.html
標籤:其他
上一篇:資料加密以及國密基礎知識
