最淺顯易懂的Django系列教程(48)-memcached

memcached

什么是memcached:

  1. memcached之前是danga的一個(gè)項(xiàng)目迂曲,最早是為L(zhǎng)iveJournal服務(wù)的肉盹,當(dāng)初設(shè)計(jì)師為了加速LiveJournal訪問(wèn)速度而開(kāi)發(fā)的刊头,后來(lái)被很多大型項(xiàng)目采用眠寿。官網(wǎng)是www.danga.com或者是memcached.org莽鸿。
  2. Memcached是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng)躬柬,全世界有不少公司采用這個(gè)緩存項(xiàng)目來(lái)構(gòu)建大負(fù)載的網(wǎng)站拜轨,來(lái)分擔(dān)數(shù)據(jù)庫(kù)的壓力。Memcached是通過(guò)在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表允青,memcached能存儲(chǔ)各種各樣的數(shù)據(jù)橄碾,包括圖像、視頻颠锉、文件法牲、以及數(shù)據(jù)庫(kù)檢索的結(jié)果等。簡(jiǎn)單的說(shuō)就是將數(shù)據(jù)調(diào)用到內(nèi)存中琼掠,然后從內(nèi)存中讀取拒垃,從而大大提高讀取速度。
  3. 哪些情況下適合使用Memcached:存儲(chǔ)驗(yàn)證碼(圖形驗(yàn)證碼瓷蛙、短信驗(yàn)證碼)悼瓮、登錄session等所有不是至關(guān)重要的數(shù)據(jù)戈毒。

安裝和啟動(dòng)memcached

  1. windows:

    • 安裝:memcached.exe -d install
    • 啟動(dòng):memcached.exe -d start横堡。
  2. linux(ubuntu):

    • 安裝:sudo apt install memcached

    • 啟動(dòng):

      cd /usr/local/memcached/bin
      ./memcached -d start
      
  3. 可能出現(xiàn)的問(wèn)題:

    • 提示你沒(méi)有權(quán)限:在打開(kāi)cmd的時(shí)候埋市,右鍵使用管理員身份運(yùn)行。
    • 提示缺少pthreadGC2.dll文件:將pthreadGC2.dll文件拷貝到windows/System32.
    • 不要放在含有中文的路徑下面翅萤。
  4. 啟動(dòng)memcached

    • -d:這個(gè)參數(shù)是讓memcached在后臺(tái)運(yùn)行恐疲。
    • -m:指定占用多少內(nèi)存。以M為單位套么,默認(rèn)為64M
    • -p:指定占用的端口碳蛋。默認(rèn)端口是11211胚泌。
    • -l:別的機(jī)器可以通過(guò)哪個(gè)ip地址連接到我這臺(tái)服務(wù)器。如果是通過(guò)service memcached start的方式肃弟,那么只能通過(guò)本機(jī)連接玷室。如果想要讓別的機(jī)器連接,就必須設(shè)置-l 0.0.0.0笤受。

    如果想要使用以上參數(shù)來(lái)指定一些配置信息穷缤,那么不能使用service memcached start,而應(yīng)該使用/usr/bin/memcached的方式來(lái)運(yùn)行箩兽。比如/usr/bin/memcached -u memcache -m 1024 -p 11222 start津肛。

telnet操作memcached

telnet ip地址 [11211]

  1. 添加數(shù)據(jù):

    • set

      • 語(yǔ)法:
          set key flas(是否壓縮) timeout value_length
          value
        
      • 示例:
          set username 0 60 7
          zhiliao
        
    • add

      • 語(yǔ)法:

          add key flas(0) timeout value_length
          value
        
      • 示例:

          add username 0 60 7
          xiaotuo
        

        setadd的區(qū)別:add是只負(fù)責(zé)添加數(shù)據(jù),不會(huì)去修改數(shù)據(jù)汗贫。如果添加的數(shù)據(jù)的key已經(jīng)存在了身坐,則添加失敗,如果添加的key不存在落包,則添加成功部蛇。而set不同,如果memcached中不存在相同的key咐蝇,則進(jìn)行添加涯鲁,如果存在,則替換有序。

  2. 獲取數(shù)據(jù):

    • 語(yǔ)法:
        get key
      
    • 示例:
        get username
      
  3. 刪除數(shù)據(jù):

    • 語(yǔ)法:
        delete key
      
    • 示例:
        delete username
      
    • flush_all:刪除memcached中的所有數(shù)據(jù)抹腿。
  4. 查看memcached的當(dāng)前狀態(tài):

    • 語(yǔ)法:stats

通過(guò)python操作memcached

  1. 安裝:python-memcachedpip install python-memcached笔呀。

  2. 建立連接:

     import memcache
     mc = memcache.Client(['127.0.0.1:11211','192.168.174.130:11211'],debug=True)
    
  3. 設(shè)置數(shù)據(jù):

     mc.set('username','hello world',time=60*5)
     mc.set_multi({'email':'xxx@qq.com','telphone':'111111'},time=60*5)
    
  4. 獲取數(shù)據(jù):

     mc.get('telphone')
    
  5. 刪除數(shù)據(jù):

     mc.delete('email')
    
  6. 自增長(zhǎng):

     mc.incr('read_count')
    
  7. 自減少:

     mc.decr('read_count')
    

memcached的安全性:

memcached的操作不需要任何用戶(hù)名和密碼幢踏,只需要知道memcached服務(wù)器的ip地址和端口號(hào)即可。因此memcached使用的時(shí)候尤其要注意他的安全性许师。這里提供兩種安全的解決方案房蝉。分別來(lái)進(jìn)行講解:

  1. 使用-l參數(shù)設(shè)置為只有本地可以連接:這種方式僚匆,就只能通過(guò)本機(jī)才能連接,別的機(jī)器都不能訪問(wèn)搭幻,可以達(dá)到最好的安全性咧擂。
  2. 使用防火墻,關(guān)閉11211端口檀蹋,外面也不能訪問(wèn)松申。
  ufw enable # 開(kāi)啟防火墻
  ufw disable # 關(guān)閉防火墻
  ufw default deny # 防火墻以禁止的方式打開(kāi),默認(rèn)是關(guān)閉那些沒(méi)有開(kāi)啟的端口
  ufw deny 端口號(hào) # 關(guān)閉某個(gè)端口
  ufw allow 端口號(hào) # 開(kāi)啟某個(gè)端口

在Django中使用memcached:

首先需要在settings.py中配置好緩存:

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

如果想要使用多臺(tái)機(jī)器俯逾,那么可以在LOCATION指定多個(gè)連接贸桶,示例代碼如下:

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

配置好memcached的緩存后,以后在代碼中就可以使用以下代碼來(lái)操作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在存儲(chǔ)數(shù)據(jù)到memcached中的時(shí)候皇筛,不會(huì)將指定的key存儲(chǔ)進(jìn)去,而是會(huì)對(duì)key進(jìn)行一些處理坠七。比如會(huì)加一個(gè)前綴水醋,會(huì)加一個(gè)版本號(hào)。如果想要自己加前綴彪置,那么可以在settings.CACHES中添加KEY_FUNCTION參數(shù):

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
    }
}

看文章不過(guò)癮拄踪?還有免費(fèi)的視頻教程,讓你學(xué)起來(lái)更輕松:https://www.zhiliaoketang.cn/course/detail/4.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拳魁,一起剝皮案震驚了整個(gè)濱河市惶桐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌的猛,老刑警劉巖耀盗,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異卦尊,居然都是意外死亡叛拷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)岂却,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忿薇,“玉大人,你說(shuō)我怎么就攤上這事躏哩∈鸷疲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵扫尺,是天一觀的道長(zhǎng)筋栋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)正驻,這世上最難降的妖魔是什么弊攘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任抢腐,我火速辦了婚禮,結(jié)果婚禮上襟交,老公的妹妹穿的比我還像新娘迈倍。我一直安慰自己,他們只是感情好捣域,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布啼染。 她就那樣靜靜地躺著,像睡著了一般焕梅。 火紅的嫁衣襯著肌膚如雪迹鹅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,807評(píng)論 1 314
  • 那天贞言,我揣著相機(jī)與錄音徒欣,去河邊找鬼。 笑死蜗字,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脂新。 我是一名探鬼主播挪捕,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼争便!你這毒婦竟也來(lái)了级零?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滞乙,失蹤者是張志新(化名)和其女友劉穎奏纪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斩启,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡序调,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兔簇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片发绢。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垄琐,靈堂內(nèi)的尸體忽然破棺而出边酒,到底是詐尸還是另有隱情,我是刑警寧澤狸窘,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布墩朦,位于F島的核電站,受9級(jí)特大地震影響翻擒,放射性物質(zhì)發(fā)生泄漏氓涣。R本人自食惡果不足惜牛哺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望春哨。 院中可真熱鬧荆隘,春花似錦、人聲如沸赴背。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凰荚。三九已至燃观,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間便瑟,已是汗流浹背缆毁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留到涂,地道東北人脊框。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像践啄,于是被迫代替她去往敵國(guó)和親浇雹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361