什么是緩存
緩存系統(tǒng)是為了解決數(shù)據(jù)庫服務(wù)器和web服務(wù)器之間的瓶頸粪摘。如果一個網(wǎng)站的流量很大瀑晒,這個瓶頸將會非常明顯,每次數(shù)據(jù)庫查詢耗費的時間將會非撑且猓可觀苔悦。對于更新速度不是很快的網(wǎng)站,我們可以用靜態(tài)化來避免過多的數(shù)據(jù)庫查詢椎咧。對于更新速度以秒計的網(wǎng)站玖详,靜態(tài)化也不會太理想,可以用緩存系統(tǒng)來構(gòu)建。如果只是單臺服務(wù)器用作緩存蟋座,問題不會太復(fù)雜劳澄,如果有多臺服務(wù)器用作緩存,就要考慮緩存服務(wù)器的負載均衡蜈七。
什么是redis
- 市面上一般兩種數(shù)據(jù)庫秒拔,一種是mysql、oracle之類的關(guān)系型數(shù)據(jù)飒硅,還就是鍵值數(shù)據(jù)庫砂缩;
- 鍵值數(shù)據(jù)庫的存儲結(jié)構(gòu)類似于一個字典;
- Redis是一個開源的使用ANSI C語言編寫三娩、遵守BSD協(xié)議庵芭、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型雀监、Key-Value數(shù)據(jù)庫双吆,并提供多種語言的API。
- 它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器会前,因為值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型好乐。
- 數(shù)據(jù)結(jié)構(gòu):
string(字符串)
list(雙向鏈表)
dict(hash表)
zset(有序集合)
set(集合) - 相比如關(guān)系數(shù)據(jù)的優(yōu)勢:
a. 它是鍵值數(shù)據(jù)庫,本身數(shù)據(jù)結(jié)構(gòu)查詢就比關(guān)系數(shù)據(jù)庫快
b. redis是基于內(nèi)存的一個數(shù)據(jù)庫瓦宜,I/O影響的效率較小
安裝操作:
- 啟動
sudo service redis start - 停止
sudo service redis stop - 重啟
sudo service redis restart - 客戶端操作
redis-cli
在django中使用redis當作緩存
- 安裝蔚万,django-redis是一個開源的python包
django-redis文檔地址:https://github.com/niwinz/django-redis
pip install django-redis
- 在settings中配置如下
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
- 使用頁面緩存
a. 頁面緩存使用的場景,一般都是變動較小的頁面临庇,比如Index反璃,首頁;
b. 頁面緩存使用需要注意假夺,因為可能影響你邏輯展示淮蜈;
from django.views.decorators.cache import cache_page
...
url(r'^login/$', cache_page(60)(views.Login.as_view()), name="login"),
- 訪問緩存
from django.core.cache import cache
- 新建set(key, value, timeout),
key:鍵
value: 值
timeout: 超時時間, 是一個可選參數(shù)已卷,默認為你配置的超時時間梧田。
cache.set('my_key', 'hello, world!', 30)
- 添加add(key, value, timeout)它使用與set()相同的參數(shù),但如果指定的鍵已經(jīng)存在悼尾,它不會嘗試更新緩存
cache.add('my_key', 'hello, world!')
- 設(shè)置多個值set_many 柿扣,請使用set_many()傳遞鍵值對的字典:
cache.set_many({'a': 1, 'b': 2, 'c': 3})
- 獲取get(key)
cache.get('add_key')
- 獲取與創(chuàng)建get_or_set(key, value, timeout)
cache.get_or_set("test", "2", 100)
- 刪除delete(key)
cache.delete('a')
- 批量刪除 delete_many(keys)
cache.delete_many(['a', 'b', 'c'])
- 清除所有clear肖方, 該操作一定要慎重
cache.clear()