1. 程式人生 > >memcached簡單介紹及在django中的使用

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

item 讀取 用戶 維護 數字 emc 當前 性能 djang

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

memcached適用於哪些場景?
  存儲驗證碼(圖形驗證碼、短信驗證碼)、登錄session等所有不是至關重要的數據。

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

  啟動: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。

memcached的基本使用:
  連接:
  我們一般使用telnet去連接memcached服務,然後進行操作,Telnet連接memcached:
    telnet ip地址 port端口號

    例如:telnet 192.168.42.133 11211

  基本操作:
  增加或更改數據:
  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
    }
  }

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