<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          最全總結(jié) | 聊聊 Python 數(shù)據(jù)處理全家桶(Memcached篇)

          共 4142字,需瀏覽 9分鐘

           ·

          2020-09-28 02:11


          點(diǎn)擊上方“AirPython”,選擇“加為星標(biāo)

          第一時(shí)間關(guān)注 Python 技術(shù)干貨!


          1. 前言

          本篇文章繼續(xù)繼續(xù)另外一種比較常用的數(shù)據(jù)存儲(chǔ)方式:Memcached

          Memcached:一款高性能分布式內(nèi)存對(duì)象緩存系統(tǒng),通過(guò)?內(nèi)存緩存,以減少數(shù)據(jù)庫(kù)的讀取,從而分擔(dān)數(shù)據(jù)庫(kù)的壓力,進(jìn)而提高網(wǎng)站的加載速度

          Memcached,實(shí)際上是一套簡(jiǎn)潔的鍵值對(duì)存儲(chǔ)系統(tǒng),可以存儲(chǔ)各種類(lèi)型的數(shù)據(jù),包含:字符串、對(duì)象、圖像、文件、視頻等

          由于 Memcached 的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,因此重啟服務(wù)或系統(tǒng)之后,數(shù)據(jù)會(huì)全部丟失;另外,當(dāng) Memcached 使用容量達(dá)到指定值時(shí),會(huì)基于?LRU 算法,自動(dòng)刪除掉不使用的緩存

          Memcached 協(xié)議簡(jiǎn)潔而強(qiáng)大,開(kāi)發(fā)方便快捷,兼容大部分的開(kāi)發(fā)語(yǔ)言;本篇文章就聊聊 Python 操作?Memcached 正確的姿勢(shì)

          2. 準(zhǔn)備

          我們以在云服務(wù)器 Centos 7.8?安裝 Memcached-Server 為例

          首先,在云服務(wù)器上安裝 Memcached

          #?使用yum安裝memcached
          yum?install?memcached

          通過(guò)?whereis?命令,查詢出 Memcached 安裝的目錄

          #?使用whereis命令查詢memcached安裝目錄
          #?/usr/bin/memcached
          [root@VM-16-11-centos?~]#?whereis?memcached
          memcached:?/usr/bin/memcached?/usr/share/man/man1/memcached.1.gz

          然后,通過(guò)命令行及參數(shù)啟動(dòng)?Memcached 服務(wù)

          #?運(yùn)行memcached服務(wù)
          #?-p:端口號(hào)
          #?-m:分類(lèi)的內(nèi)存
          #?-d:守護(hù)進(jìn)程,后臺(tái)運(yùn)行
          #?-u:運(yùn)行memcached的用戶
          #?-l:設(shè)置哪些ip可以連接到服務(wù),0.0.0.0:容許外網(wǎng)ip訪問(wèn)
          /usr/bin/memcached?-p?11211?-m?64m?-d?-u?root?-l?0.0.0.0

          常見(jiàn)的啟動(dòng)參數(shù)包含:

          • -d:通過(guò)守護(hù)進(jìn)程,在后臺(tái)運(yùn)行

          • -m:分配的最大內(nèi)存,默認(rèn)大小為 64 M

          • -u:運(yùn)行 Memcached 的用戶

          • -l:設(shè)置可以訪問(wèn) Memecache 服務(wù)的 ip 地址,默認(rèn)只能通過(guò)本機(jī)訪問(wèn);如果想外網(wǎng)進(jìn)行訪問(wèn),需要設(shè)置為:0.0.0.0

          • -p:設(shè)置 Memcached 監(jiān)聽(tīng)的端口號(hào),默認(rèn)為 111211

          • -c:最大運(yùn)行的并發(fā)連接數(shù),默認(rèn)為 1024

          接著,開(kāi)啟防火墻端口

          需要注意的是,如果是云服務(wù)器,需要在安全組中開(kāi)放相應(yīng)端口號(hào)

          #?開(kāi)啟端口號(hào)
          firewall-cmd?--add-port=11211/tcp?--permanent

          #?重啟立即生效
          firewall-cmd?--reload

          完成以上操作,我們有兩種方式操作數(shù)據(jù)

          分別是:

          1、通過(guò)?telnet?連接 Memecached 服務(wù),使用命令行去操作

          #?連接
          telnet?IP地址?11211

          2、通過(guò)編程語(yǔ)言,包含:Python、Java、Php,去操作 Memcached 數(shù)據(jù)

          以 Python 為例,需要安裝?python-memcached?依賴(lài)

          #?安裝依賴(lài)
          pip3?install?python-memcached

          3. 實(shí)戰(zhàn)

          在操作 Memcache 中的數(shù)據(jù)之前,我們需要導(dǎo)入 memcache,使用?Client()?方法指定要操作的 Memecache 服務(wù),構(gòu)建一個(gè)數(shù)據(jù)連接對(duì)象

          def?__init__(self):
          ????#?連接memcached服務(wù),可以包含多個(gè)服務(wù)ip
          ????self.mc?=?memcache.Client(['ip:11211'],?debug=True)

          接下來(lái)我們以新增、查詢、更新、追加、刪除、為例,講講 Python 操作這些數(shù)據(jù)的方法

          1、新增操作

          新增操作對(duì)應(yīng)的方法是:add(key,value,timeout)

          其中,參數(shù) timeout 表示數(shù)據(jù)保留的時(shí)間,超時(shí)會(huì)自動(dòng)被清除掉

          需要注意的是,如果準(zhǔn)備插入鍵值對(duì)中的 key 在原數(shù)據(jù)集中不存在,則會(huì)新增一條記錄到數(shù)據(jù)集中;否則,會(huì)添加失敗,并警告提示

          def?__add(self):
          ????"""
          ????添加記錄
          ????:return:
          ????"""

          ????#?添加一條數(shù)據(jù),如果已經(jīng)存在,會(huì)添加失敗,并提出異常
          ????# time:保存時(shí)間,超時(shí)會(huì)被清除,單位為秒,默認(rèn)是保存永久
          ????#?注意:如果添加的key已經(jīng)存在,會(huì)警告:MemCached: while expecting 'STORED', got unexpected response 'NOT_STORED'
          ????self.mc.add("name",?"xag",?time=60?*?5)
          ????self.mc.add("age",?23)

          2、查詢操作

          Memcached 查詢操作分為:

          • 通過(guò) Key 去查詢單條記錄

          • 通過(guò)多個(gè) Key 組成的列表去查詢多條記錄

          其中,單條記錄查詢對(duì)應(yīng)的方法是:get(key)

          def?__query_one(self,?key):
          ????"""
          ????查詢單條記錄
          ????:return:
          ????"""

          ????result?=?self.mc.get(key)
          ????print('單條記錄查詢,key:',?key,?",value:",?result)

          多條記錄的查詢,對(duì)應(yīng)的方法是:get_multi(keys)

          def?__query_many(self,?keys):
          ????"""
          ????查詢多條記錄
          ????:param?keys:?鍵值列表
          ????:return:
          ????"""

          ????values?=?self.mc.get_multi(keys)

          ????#?dict,鍵值對(duì)
          ????print(type(values))
          ????print('多條記錄查詢:',?values)

          3、更新操作

          更新操作包含三種方法,分別是:

          • 更新一條記錄,如果鍵不存在,則更新失敗

            對(duì)應(yīng)方法是:replace(key,value)

          • 更新一條記錄,如果鍵不存在,則新增一條記錄

            對(duì)應(yīng)方法是:set(key,value)

          • 更新多條記錄,如果其中有不存在的鍵,則將對(duì)應(yīng)的鍵值對(duì)新增到數(shù)據(jù)集中

            對(duì)應(yīng)方法:set_multi({key1:value1...})

          具體實(shí)例代碼如下:

          def?__update_default(self):
          ????"""
          ????更新數(shù)據(jù),包含:replace、set、set_multi
          ????:return:
          ????"""

          ????#?1、使用replace更新一條記錄
          ????#?self.mc.replace("name","xag1")
          ????#?self.__query_one("name")

          ????#?2、使用set更新記錄,如果key不存在,則添加一條記錄
          ????#?set?=?replace?+?add
          ????#?self.mc.set("name",?"xag2")
          ????#?self.__query_one("name")

          ????#?3、使用set_multi更新多條記錄,如果其中有不存在的key,則新建一個(gè)鍵值對(duì)
          ????self.mc.set_multi({"name":?"xag3",?"age":?28})
          ????self.__query_many(["name",?"age"])

          4、追加操作

          追加操作相當(dāng)于修改某一個(gè)鍵的值,在頭部或者尾部追加數(shù)據(jù)

          其中:

          • append(str):在尾部追加一段數(shù)據(jù)

          • prepend(str):在頭部新增一段數(shù)據(jù)

          實(shí)踐代碼如下:

          def?__update_append(self):
          ????"""
          ????追加更新,包含:append、prepend
          ????:return:
          ????"""


          ????#?1、append
          ????#?value尾部追加內(nèi)容
          ????self.mc.append("name","我是新增的內(nèi)容")
          ????self.__query_one("name")

          ????#?2、prepend
          ????#?頭部新增內(nèi)容
          ????self.mc.prepend("name","頭部新增的內(nèi)容")
          ????self.__query_one("name")

          5、刪除操作

          和查詢操作類(lèi)似,刪除操作同樣支持單個(gè)鍵值對(duì)的刪除和多個(gè)鍵值對(duì)的刪除

          • delete(key):刪除某一個(gè)鍵值對(duì)

          • delete_multi(keys):刪除列表中所有的 Key 對(duì)應(yīng)的所有鍵值對(duì)

          對(duì)應(yīng)的操作代碼如下:

          def?__delete(self):
          ????"""
          ????刪除數(shù)據(jù),包含:delete、delete_multi
          ????:return:delete_multi
          ????"""

          ????#?1、delete
          ????#?刪除單條鍵值對(duì)
          ????#?self.mc.delete("age")
          ????#?self.__query_one("age")

          ????#?2、delete_multi
          ????#?刪除多條記錄
          ????keys?=?["name","age"]
          ????self.mc.delete_multi(keys)
          ????self.__query_many(keys)

          4.最后

          本篇文章通過(guò) Python,實(shí)現(xiàn)了對(duì) Memcached 數(shù)據(jù)的常規(guī)操作,更多復(fù)雜的操作可以點(diǎn)擊閱讀原文去查看

          我已經(jīng)將文中全部源碼上傳到后臺(tái),關(guān)注公眾號(hào)后回復(fù)「?dball?」即可獲得全部源碼

          如果你覺(jué)得文章還不錯(cuò),請(qǐng)大家?點(diǎn)贊、分享、留言?下,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!



          推薦閱讀


          聊聊 Python 數(shù)據(jù)處理全家桶(Mysql 篇)

          聊聊 Python 數(shù)據(jù)處理全家桶(Sqlite 篇)

          聊聊 Python 數(shù)據(jù)處理全家桶(Redis 篇)



          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜黄片视频 | 亚洲日韩欧美色图 | 欧美黄色宗合一级二级三级 | 天天色天天干天天日 | 偷拍福利视频 |