django緩存與redis

什么是緩存

緩存系統(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)作緩存

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()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容