打造高效能站點

2021-08-26 19:00:18 字數 3103 閱讀 8014

---robbin的部落格

blog/77338 ---為什麼orm效能比ibatis好?

--django快取

cache_backend = 'memcached:'

memcached的乙個極好的特性是它在多個伺服器分享快取的能力,這意味著你可以在多台機器上執行memcached程序,程式將會把這組機器當作乙個單獨的快取,而不需要在每台機器上覆制快取值

cache_backend = 'memcached:'

memcached的是基於記憶體的快取有乙個重大的缺點,因為快取資料只儲存在記憶體中,則如果伺服器宕機的話資料會丟

失,顯然記憶體不是為持久資料儲存準備的

==資料庫快取

在你的資料庫建立快取表,並在表裡指出django的快取系統來使用資料庫表作為快取後端

檔案系統快取

cache_backend = 'file:///var/tmp/django_cache'

本地快取器快取

cache_backend = 'locmem:///'

簡單快取(開發用)

cache_backend = '******:///'

假快取(開發用)

cache_backend = 'dummy:///'

cache_backend = "locmem:///?timeout=30&max_entries=400"

整站點快取

檢視快取

乙個更細粒度的使用快取框架的方式是快取單獨檢視的輸出.

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)

def my_view(request, param):

檢視快取和url有關,如果多個urls指向同一檢視,則每個url將被單獨快取,

urlpatterns = ('',

(r'^foo/(\d)/$', my_view),

) 則對/foo/1/和/foo/23/的請求將像你期望的那樣被單獨快取,但是一旦乙個特別的url(例如/foo/23/)被請求,則該url後續

的請求將使用快取. 在url配置裡指定檢視快取而不是在檢視方法本身附近,你可能想重用檢視方法到另乙個很少快取的站點,或者你可能想發布檢視給那些可

能想不用快取來使用它們的人.

urlpatterns = ('',

(r'^foo/(\d)/$', cache_page(my_view, 60 * 15)),

) 低階快取api:

from django.core.cache import cache

>>> cache.set('my_key', 'hello, world!', 30)

>>> cache.get('my_key')

如果快取中物件不存在,或者快取後端不可得到,則cache.get()返回none:

# wait 30 seconds for 'my_key' to expire...

>>> cache.get('my_key')

none

建議不要在快取中儲存字面上的none,因為你不能區別你儲存的none值和通過返回none值表示的快取缺失

cache.get()可以使用乙個default引數,它指定了如果物件在快取中不存在時的返回值:

>>> cache.get('my_key', 'has expired')

'has expired'

>>> cache.set('a', 1)

>>> cache.set('b', 2)

>>> cache.set('c', 3)

>>> cache.get_many(['a', 'b', 'c'])

====

from django.views.decorators.vary import vary_on_headers

# python 2.4+ decorator syntax.

@vary_on_headers('user-agent')

def my_view(request):

# ...

這種情況下,快取機制(例如django自己的快取中介軟體)將對每個唯一的user-agent快取單獨版本的頁面

使用vary_on_headers裝飾器而不是手動設定vary頭部(使用類似於response['vary'] = 'user-agent')的優勢是裝飾器新增

到vary頭部(可能已經存在)而不是從零開始設定它並潛在的覆蓋已經在那裡的東西

你可以傳遞多個頭部到vary_on_headers():

這兩個檢視是相等的:

@vary_on_cookie

def my_view(request):

# ...

@vary_on_headers('cookie')

def my_view(request):

# ...

===快取使用策略

在專案中的具體應用策略(也就是哪些資料應該快取?怎麼樣快取?過 期策略?)

總原則是將經常需要從資料庫讀取的資料快取在memcached中。

這些資料也分為幾類:

這類資料就使用典型的快取策略,設定一過合理的過期時間,當資料過期以後再從資料庫中讀取。當然你得制定乙個快取清除策略,便於編輯或者其它人員能馬上看到效果。

這類資料首先被載入到memcached中,當發生更改(新增、修改、刪除)時就清除快取。在快取的時候,我將查詢的sql語句md5()得到它的 hash值作為key,結果陣列作為值寫入memcached,並且將該sql涉及的table_name以及hash值配對存入memcached中。 當更改了這個表時,我就將與此表相配對的key的快取全部刪除。

六、session資料

使用memcached來儲存session的效率是最高的。memcached本身也是非常穩定的,不太用擔心它會突然down掉引起session資料的丟失,即使丟失就重新登入了,也沒啥。見[多伺服器session共享之memcache共享]

【總結】

通過以上的策略資料庫的壓力將會被大大減輕。檢驗你使用memcached是否得當的方法是檢視memcached的命中率。有些策略好的**的命中率可以到達到90%以上。

構建高效能Web站點 筆記四

第七章 web伺服器快取 對url對映進行快取 ssi模式下對內容的通讀 有什麼提高?需要了解url解析過程。對於apache,它提供了兩個磁碟快取和記憶體快取mod disk cache,mod mem cache。mod disk cache在磁碟上維護了一塊多個程序的快取區,在效能上比mod ...

原創 構建高效能的Web站點

原創 構建高效能的web站點 一 web站點高效能主要體現在 高可用,低成本,高效能,可擴充套件,易維護 二 構建高效能的web站點措施 1 瀏覽器端優化 快取1 瀏覽器快取 2 web負載均衡 快取2 反向 快取 3 web元件分離 快取3 動態內容快取 快取4 分布式快取 快取5 資料庫快取及效...

使用SeasLog打造高效能日誌系統

seaslog是乙個c語言編寫的php擴充套件,提供一組規範標準的功能函式,在php專案中方便 規範 高效地寫日誌,以及快速地讀取和查詢日誌。高效能seaslog使用c語言編寫,並帶有緩衝池的功能。每次寫入的日誌,是先寫入到記憶體當中,當達到一定的數量時,才寫入到檔案當中。配置簡單 seaslog的...