什么是緩存
緩存系統(tǒng)是為了解決數(shù)據(jù)庫(kù)服務(wù)器和web服務(wù)器之間的瓶頸。如果一個(gè)網(wǎng)站的流量很大,這個(gè)瓶頸將會(huì)非常明顯,每次數(shù)據(jù)庫(kù)查詢耗費(fèi)的時(shí)間將會(huì)非??捎^。對(duì)于更新速度不是很快的網(wǎng)站,我們可以用靜態(tài)化來(lái)避免過(guò)多的數(shù)據(jù)庫(kù)查詢。對(duì)于更新速度以秒計(jì)的網(wǎng)站,靜態(tài)化也不會(huì)太理想,可以用緩存系統(tǒng)來(lái)構(gòu)建。如果只是單臺(tái)服務(wù)器用作緩存,問(wèn)題不會(huì)太復(fù)雜,如果有多臺(tái)服務(wù)器用作緩存,就要考慮緩存服務(wù)器的負(fù)載均衡。
什么是redis
- 市面上一般兩種數(shù)據(jù)庫(kù),一種是mysql、oracle之類的關(guān)系型數(shù)據(jù),還就是鍵值數(shù)據(jù)庫(kù);
- 鍵值數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)類似于一個(gè)字典;
- Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。
- 它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
- 數(shù)據(jù)結(jié)構(gòu):
string(字符串)
list(雙向鏈表)
dict(hash表)
zset(有序集合)
set(集合) - 相比如關(guān)系數(shù)據(jù)的優(yōu)勢(shì):
a. 它是鍵值數(shù)據(jù)庫(kù),本身數(shù)據(jù)結(jié)構(gòu)查詢就比關(guān)系數(shù)據(jù)庫(kù)快
b. redis是基于內(nèi)存的一個(gè)數(shù)據(jù)庫(kù),I/O影響的效率較小
安裝操作:
- 啟動(dòng)
sudo service redis start - 停止
sudo service redis stop - 重啟
sudo service redis restart - 客戶端操作
redis-cli
在django中使用redis當(dāng)作緩存
- 安裝,django-redis是一個(gè)開(kāi)源的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",
}
}
}
- 使用頁(yè)面緩存
a. 頁(yè)面緩存使用的場(chǎng)景,一般都是變動(dòng)較小的頁(yè)面,比如Index,首頁(yè);
b. 頁(yè)面緩存使用需要注意,因?yàn)榭赡苡绊懩氵壿嬚故荆?/li>
from django.views.decorators.cache import cache_page
...
url(r'^login/$', cache_page(60)(views.Login.as_view()), name="login"),
- 訪問(wèn)緩存
from django.core.cache import cache
- 新建set(key, value, timeout),
key:鍵
value: 值
timeout: 超時(shí)時(shí)間, 是一個(gè)可選參數(shù),默認(rèn)為你配置的超時(shí)時(shí)間。
cache.set('my_key', 'hello, world!', 30)
- 添加add(key, value, timeout)它使用與set()相同的參數(shù),但如果指定的鍵已經(jīng)存在,它不會(huì)嘗試更新緩存
cache.add('my_key', 'hello, world!')
- 設(shè)置多個(gè)值set_many ,請(qǐng)使用set_many()傳遞鍵值對(duì)的字典:
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()