memcached簡單介紹及在django中的使用

什麼是memcached?
  Memcached是一個高性能的分佈式的內存對象緩存系統,全世界有很多公司採用這個緩存項目來構建大負載的網站,來分擔數據庫的壓力。Memcached是經過在內存裏維護一個統一的巨大的hash表,memcached能存儲各類各樣的數據,包括圖像、視頻、文件、以及數據庫檢索的結果等,固然由於memcached中的數據是保存在內存中的,應該沒有人會把視頻、圖片等數據保存在memcached中。其實,memcached的原理簡單的說就是將數據調用到內存中,而後從內存中讀取,從而大大提升讀取速度。算法

 

memcached適用於哪些場景?
  存儲驗證碼(圖形驗證碼、短信驗證碼)、登陸session等全部不是相當重要的數據。數據庫

 

memcached服務的安裝與啓動選項:
  安裝:sudo apt install memcached  (Linux)django

  啓動:service memcached start或者/usr/bin/memcached start緩存

  啓動選項:服務器

    -u:指定啓動memcached的用戶。
    -d:這個參數是讓memcached在後臺運行。
    -m:指定運行memcached佔用多少內存,以M爲單位,默認爲64M。
    -p:指定佔用的端口,默認端口是11211。
    -l:默認爲127.0.0.1,指定別的機器能夠經過哪一個ip地址鏈接到我這臺memcached服務器。若是是經過service memcached start的方式,那麼只能經過本機鏈接。若是想要讓別的機器鏈接,就必須設置 -l  0.0.0.0。
    若是想要使用以上參數來指定一些配置信息,那麼不能使用service memcached start,而應該使用/usr/bin/memcached的方式來運行。好比/usr/bin/memcached -u memcache -m 1024 -p 11222 start。session

 

memcached的基本使用:
  鏈接:
  咱們通常使用telnet去鏈接memcached服務,而後進行操做,Telnet鏈接memcached:
    telnet  ip地址  port端口號分佈式

    例如:telnet  192.168.42.133  11211memcached

 

  基本操做:
  增長或更改數據:
  command  key  flag(是否壓縮)  expire  length
  command類型及具體使用方法:
    add:添加數據,此時key若是已經存在於memcached,則會把存不進去,NOT_STORED
    replace:只有key已經存在於memcached之中才能使用
    set:設置數據,key若是存在,則做用爲replace,若是key不存在,則做用爲add性能

  查詢數據:
    get  key網站

  刪除數據:
    delete  key : 刪除某個特定的數據
    flush_all : 刪除memcached中全部的鍵值對

  針對數字類型數據的操做:

    incr  key  increase_num:給指定的key增長increase_num

    decr  key  decrease_num:給指定的key減小decrease_num

  查看memcached的狀態:
    stats:會列出memcached的一些經常使用的數據

  查看memcached中全部的鍵:
    stats items:查看當前的item_id
    stats cachedump item_id num :查看num個鍵的名稱,若是num爲0,則查詢全部

 

在Django中使用memcached:
  首先須要在settings.py中配置好緩存:

  CACHES = {
    'default': {
      'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
      'LOCATION': '127.0.0.1:11211',
    }
  }
  若是想要使用多臺機器提供的memcached服務,那麼能夠在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進行一些處理。好比會加一個前綴,會加一個版本號,因此咱們若是咱們想要手動操做查詢到咱們在django中操做時存入的值,就必須知道存入時的實際的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
    }
  }

相關文章
相關標籤/搜索