Nginx反向代理緩存和redis簡介

Nginx中的ngx_http_proxy_module模塊可以實現後端服務器的反向代理功能,這樣就可以實現客戶端請求的動靜分離以及負載均衡功能。

當Nginx將客戶端請求反向代理至後端服務器時,建立的是keep-alive連接;代理服務器與客戶端,代理服務器與後端web server都建立長鏈,這會降低Nginx性能,所以這時候,proxy模塊的緩存功能就派上用場了,代理服務器與客戶端之間依舊保持長鏈,而代理服務器與後端web server之間請求結束後,代理服務器將內容緩存在本地,與後端不建立長鏈,大大節省了系統資源;同時,當客戶端請求來時,代理服務器會直接去緩存中尋找並返回給客戶端。代理服務器將緩存存在內存中,以key-value形式存儲,value存儲的是指向本地文件系統中存儲的URL的哈希值。緩存功能可以定義在http,server,location區段,定義在哪個區段表示有哪些請求可以使用緩存;一般來說,我們把緩存路徑定義在http段,調用緩存根據具體情況配置。


Redis介紹

頻繁的寫入操作、相對較少的讀取統計信息的操作(如網站訪問計數器),應該使用基於內存的Key/Value(鍵/值)存儲系統(如redis) 或者是具備本地更新特性的文檔存儲系統(如MongoDB)。


redis是一款先進的Key/Value存儲系統。它與Memcached類似,區別如下:

  • redis不僅支持簡單的Key/Value類型的數據,同時還提供list、set、hash等數據結構的存儲。
  • redis支持數據的備份,即master slave模式的數據備份。
  • redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啓的時候再次加載進行使用。

在redis中,並不是所有的數據都一直存儲在內存中。

redis只會緩存所有的Key的信息,如果redis發現內存的使用量超過了某個閾值,將觸發交換(swap) 的操作。

redis根據“swappabillity=age*log(size_in_memory)” 計算出哪些Key對應的Value需要交換到磁盤,然後再將這些key對應的value持久化到磁盤中,同時在內存中清除。
這種特性使得redis可以保持超過其機器本身內存大小的數據。當然,機器本身的內存必須要能夠保持所有的key,畢竟這些數據是不會進行交換操作的。
同時由於redis將內存中的數據交換到磁盤中的時候,提供服務的主線程和進行交換操作的子線程會共享這部分內存,所以如果更新需要交換的數據,redis將阻塞這個操作,
直到子線程完成交換操作後纔可以進行修改。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章