首頁 > 軟體

django中使用memcached範例詳解

2022-06-13 18:03:31

什麼是memcached:

  • memcached之前是danga的一個專案,最早是為LiveJournal服務的,當初設計師為了加速LiveJournal存取速度而開發的,後來被很多大型專案採用。官網是www.danga.com或者是memcached.org。
  • Memcached是一個高效能的分散式的記憶體物件快取系統,全世界有不少公司採用這個快取專案來構建大負載的網站,來分擔資料庫的壓力。Memcached是通過在記憶體裡維護一個統一的巨大的hash表,memcached能儲存各種各樣的資料,包括影象、視訊、檔案、以及資料庫檢索的結果等。簡單的說就是將資料呼叫到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度。

哪些情況下適合使用Memcached:儲存驗證碼(圖形驗證碼、簡訊驗證碼)、登入session等所有不是至關重要的資料。

安裝和啟動memcached:

windows

安裝:memcached.exe -d install。

啟動:memcached.exe -d start。

linux(ubuntu)

安裝:sudo apt install memcached

啟動: cd /usr/local/memcached/bin ./memcached -d start

可能出現的問題:

提示你沒有許可權:在開啟cmd的時候,右鍵使用管理員身份執行。

提示缺少pthreadGC2.dll檔案:將pthreadGC2.dll檔案拷貝到windows/System32.

不要放在含有中文的路徑下面。

啟動memcached:

如果想要使用以上引數來指定一些設定資訊,那麼不能使用service memcached start,而應該使用/usr/bin/memcached的方式來執行。比如/usr/bin/memcached -u memcache -m 1024 -p 11222 start。

  • -d:這個引數是讓memcached在後臺執行。
  • -m:指定佔用多少記憶體。以M為單位,預設為64M。
  • -p:指定佔用的埠。預設埠是11211。
  • -l:別的機器可以通過哪個ip地址連線到我這臺伺服器。如果是通過service memcached start的方式,那麼只能通過本機連線。如果想要讓別的機器連線,就必須設定-l 0.0.0.0。

telnet操作memcached:

telnet ip地址 [11211]

新增資料:

set

語法:

set key flas(是否壓縮) timeout value_length value

範例: set username 0 60 7 zhiliao

add

語法:

add key flas(0) timeout value_length value

範例: add username 0 60 7 xiaotuo set和add的區別:add是隻負責新增資料,不會去修改資料。如果新增的資料的key已經存在了,則新增失敗,如果新增的key不存在,則新增成功。而set不同,如果memcached中不存在相同的key,則進行新增,如果存在,則替換。

獲取資料:

語法: get key

範例: get username

刪除資料:

語法: delete key

範例: delete username

flush_all:刪除memcached中的所有資料。

檢視memcached的當前狀態:

語法:stats。

通過python操作memcached:

  • 安裝:python-memcached:pip install python-memcached。
  • 建立連線: import memcache mc = memcache.Client(['127.0.0.1:11211','192.168.174.130:11211'],debug=True)
  • 設定資料: mc.set('username','hello world',time=60*5) mc.set_multi({'email':'xxx@qq.com','telphone':'111111'},time=60*5)
  • 獲取資料: mc.get('telphone')
  • 刪除資料: mc.delete('email')
  • 自增長: mc.incr('read_count')
  • 自減少: mc.decr('read_count')

memcached的安全性:

memcached的操作不需要任何使用者名稱和密碼,只需要知道memcached伺服器的ip地址和埠號即可。因此memcached使用的時候尤其要注意他的安全性。這裡提供兩種安全的解決方案。分別來進行講解:

  • 使用-l引數設定為只有本地可以連線:這種方式,就只能通過本機才能連線,別的機器都不能存取,可以達到最好的安全性。
  • 使用防火牆,關閉11211埠,外面也不能存取。
  ufw enable # 開啟防火牆
  ufw disable # 關閉防火牆
  ufw default deny # 防火牆以禁止的方式開啟,預設是關閉那些沒有開啟的埠
  ufw deny 埠號 # 關閉某個埠
  ufw allow 埠號 # 開啟某個埠

在Django中使用memcached:

首先需要在settings.py中設定好快取:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

如果想要使用多臺機器,那麼可以在LOCATION指定多個連線,範例程式碼如下:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [
            '172.19.26.240:11211',
            '172.19.26.242:11211',
        ]
    }
}

設定好memcached的快取後,以後在程式碼中就可以使用以下程式碼來操作memcached了:

from django.core.cache import cache
def index(request):
    cache.set('abc','zhiliao',60)
    print(cache.get('abc'))
    response = HttpResponse('index')
    return response

需要注意的是,django在儲存資料到memcached中的時候,不會將指定的key儲存進去,而是會對key進行一些處理。比如會加一個字首,會加一個版本號。如果想要自己加字首,那麼可以在settings.CACHES中新增KEY_FUNCTION引數:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'KEY_FUNCTION': lambda key,prefix_key,version:"django:%s"%key
    }
}

以上就是django中使用memcached範例詳解的詳細內容,更多關於django使用memcached的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com