深入了解Memcached:緩存技術的利器

文章目錄

  • 深入了解Memcached:緩存技術的利器
    • 一、Memcached簡介
      • 什么是Memcached?
      • Memcached的特點
    • 二、Memcached的工作原理
      • 緩存機制
      • 分布式緩存
    • 三、Memcached的架構
      • 客戶端與服務器
      • 數據存儲
    • 四、Memcached的安裝與配置
      • 安裝Memcached
        • 在Linux上安裝
        • 在macOS上安裝
      • 配置Memcached
        • 示例配置文件
      • 啟動與停止Memcached
    • 五、Memcached的使用方法
      • 基本操作
        • 安裝pymemcache
        • 連接Memcached
      • 進階操作
        • 設置過期時間
        • 批量操作
        • 自增/自減操作
    • 六、Memcached的測試與接口詳解
      • 單元測試
      • 接口測試
    • 七、Memcached的應用場景
      • Web應用加速
      • 會話管理
      • 分布式系統
    • 八、總結

👍 個人網站:【 洛秋小站】【洛秋資源小站】

深入了解Memcached:緩存技術的利器

Memcached是一種高性能的分布式內存對象緩存系統,旨在通過減少數據庫負載,提高動態Web應用的性能。本文將詳細介紹Memcached的原理、架構、安裝配置、使用方法以及常見的使用場景。還將包含測試接口和詳細的解釋。

一、Memcached簡介

什么是Memcached?

Memcached是一個開源的高性能分布式內存緩存系統,用于加速動態Web應用。它通過將數據庫查詢結果、API調用結果或其他數據緩存到內存中,減少對數據庫的訪問頻率,從而提高應用的響應速度。

Memcached的特點

  • 高性能:Memcached使用內存進行數據存儲,訪問速度極快。
  • 分布式:Memcached支持多節點分布式部署,具備良好的擴展性。
  • 簡單易用:Memcached的API簡單直觀,易于集成到各種編程語言中。
  • 輕量級:Memcached占用資源少,安裝配置簡單。

二、Memcached的工作原理

Memcached的核心是一個Key-Value存儲系統,支持以下基本操作:

  • set:將數據存儲到緩存中。
  • get:從緩存中讀取數據。
  • delete:從緩存中刪除數據。
  • incr/decr:對緩存中的數值進行增加或減少操作。

緩存機制

Memcached采用LRU(Least Recently Used,最近最少使用)算法管理緩存數據。當緩存容量達到上限時,Memcached會自動刪除最久未使用的數據,以騰出空間存儲新的數據。

分布式緩存

在分布式環境中,Memcached通過一致性哈希算法將數據分布到多個節點上。每個節點獨立運行,當某個節點失效時,其他節點的數據不受影響。

三、Memcached的架構

Memcached的架構非常簡單,由多個緩存節點和客戶端組成。每個緩存節點獨立運行,負責處理客戶端的請求。客戶端通過一致性哈希算法將數據分布到不同的緩存節點上。

客戶端與服務器

客戶端通過TCP協議與Memcached服務器通信。常見的客戶端庫包括libmemcached(C/C++)、pymemcache(Python)、memcached(Java)等。

數據存儲

Memcached將數據存儲在內存中,以固定大小的內存塊為單位進行管理。每個內存塊由多個緩存項(Cache Item)組成,緩存項包括鍵、值、標志位和過期時間等信息。

四、Memcached的安裝與配置

安裝Memcached

在不同的操作系統上,安裝Memcached的方法略有不同。以下是一些常見操作系統上的安裝方法。

在Linux上安裝
# 使用apt-get安裝(Debian/Ubuntu)
sudo apt-get update
sudo apt-get install memcached# 使用yum安裝(CentOS/RHEL)
sudo yum install memcached
在macOS上安裝
brew install memcached

配置Memcached

Memcached的配置文件通常位于/etc/memcached.conf。以下是一些常見的配置選項:

  • -m:指定內存分配大小(單位:MB)。
  • -p:指定監聽端口。
  • -l:指定監聽地址。
  • -d:以守護進程方式運行。
示例配置文件
# 分配64MB內存
-m 64
# 監聽11211端口
-p 11211
# 監聽本地地址
-l 127.0.0.1
# 以守護進程方式運行
-d

啟動與停止Memcached

# 啟動Memcached
sudo service memcached start# 停止Memcached
sudo service memcached stop# 重啟Memcached
sudo service memcached restart

五、Memcached的使用方法

基本操作

以下示例展示了如何使用Python客戶端庫pymemcache與Memcached進行交互。

安裝pymemcache
pip install pymemcache
連接Memcached
from pymemcache.client import base# 連接到Memcached服務器
client = base.Client(('localhost', 11211))# 設置緩存
client.set('foo', 'bar')# 獲取緩存
value = client.get('foo')
print(value)  # 輸出:b'bar'# 刪除緩存
client.delete('foo')

進階操作

設置過期時間
# 設置緩存,并指定過期時間(10秒)
client.set('foo', 'bar', expire=10)
批量操作
# 批量設置緩存
items = {'key1': 'value1', 'key2': 'value2'}
client.set_many(items)# 批量獲取緩存
keys = ['key1', 'key2']
values = client.get_many(keys)
print(values)  # 輸出:{'key1': b'value1', 'key2': b'value2'}
自增/自減操作
# 自增操作
client.set('counter', 0)
client.incr('counter', 1)
value = client.get('counter')
print(value)  # 輸出:b'1'# 自減操作
client.decr('counter', 1)
value = client.get('counter')
print(value)  # 輸出:b'0'

六、Memcached的測試與接口詳解

單元測試

以下示例展示了如何使用unittest對Memcached操作進行單元測試。

import unittest
from pymemcache.client import baseclass TestMemcached(unittest.TestCase):def setUp(self):self.client = base.Client(('localhost', 11211))self.client.flush_all()def test_set_get(self):self.client.set('foo', 'bar')value = self.client.get('foo')self.assertEqual(value, b'bar')def test_delete(self):self.client.set('foo', 'bar')self.client.delete('foo')value = self.client.get('foo')self.assertIsNone(value)def test_incr_decr(self):self.client.set('counter', 0)self.client.incr('counter', 1)value = self.client.get('counter')self.assertEqual(value, b'1')self.client.decr('counter', 1)value = self.client.get('counter')self.assertEqual(value, b'0')if __name__ == '__main__':unittest.main()

接口測試

以下示例展示了如何使用requests對Memcached API進行接口測試。

import unittest
import requestsclass TestMemcachedAPI(unittest.TestCase):def test_set_get(self):url = "http://localhost:5000/cache"data = {"key": "foo", "value": "bar"}response = requests.post(url, json=data)self.assertEqual(response.status_code, 200)response = requests.get(f"{url}/foo")self.assertEqual(response.status_code, 200)self.assertEqual(response.json()['value'], "bar")def test_delete(self):url = "http://localhost:5000/cache/foo"response = requests.delete(url)self.assertEqual(response.status_code, 200)response = requests.get(url)self.assertEqual(response.status_code, 404)if __name__ == '__main__':unittest.main()

七、Memcached的應用場景

Web應用加速

Memcached可以緩存數據庫查詢結果、API調用結果等,減少數據庫訪問次數,提高響應速度。例如,在一個新聞網站中,可以緩存熱門新聞列表,避免頻繁查詢數據庫。

會話管理

Memcached可以用于存儲用戶會話信息,提高會話訪問速度。例如,在一個電子商務網站中,可以緩存用戶購物車信息,提高購物車操作的響應速度。

分布式系統

在分布式系統中,Memcached可以作為分布式緩存系統,緩存全局共享的數據,減輕數據庫負載。例如,在一個大型社交網絡中,可以緩存用戶好友列表、消息列表等。

八、總結

本文詳細介紹了Memcached的基本原理、架構、安裝配置、使用方法、測試方法以及應用場景。通過Memcached,開發者可以有效提升Web應用的性能,減少數據庫負載,改善用戶體驗。

👉 最后,愿大家都可以解決工作中和生活中遇到的難題,劍鋒所指,所向披靡~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46030.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46030.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46030.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【IEEE出版順利申請中】2024年第四屆電子信息工程與計算機科學國際會議(EIECS 2024)

2024年第四屆電子信息工程與計算機科學國際會議(EIECS 2024) 2024 4th International Conference on Electronic Information Engineering and Computer Science 中國延吉 | 2024年9月27-29日 電子信息的出現與計算機技術、通信技術和高密度存儲技術的迅速發展并在各個領域里…

每日練習,不要放棄

目錄 題目1.下面敘述錯誤的是 ( )2.java如何返回request范圍內存在的對象?3.以下代碼將打印出4.下列類定義中哪些是合法的抽象類的定義?()5.以下代碼段執行后的輸出結果為6.以下代碼運行輸出的是總結 題目 選自牛客網 1.下面敘述…

深度學習驅動智能超材料設計與應用

在深度學習與超材料融合的背景下,不僅提高了設計的效率和質量,還為實現定制化和精準化的治療提供了可能,展現了在材料科學領域的巨大潛力。深度學習可以幫助實現超材料結構參數的優化、電磁響應的預測、拓撲結構的自動設計、相位的預測及結構…

最全—航班信息管理系統【數組版】

航班管理系統(數組版) 航班信息查詢系統 1、 導言 用所學過的 C 語言,以及鏈表相關知識,實現一個航班信息的錄入、查詢、顯示、 排序等功能。航班信息 節點設計,請參見附錄。 2、 基本功能: 使用鏈表或數組…

開發指南047-前端模塊版本

平臺前端框架內置了一個文件version.vue <template> <div> <br> 應用名稱: {{name}} <br> 當前版本&#xff1a;{{version}} <br> 服務網關: {{gateway}} </div> </template> <scrip…

分析示例 | Simufact Additive鋪粉增材制造工藝缺陷仿真分析方案

近年來&#xff0c;隨著增材制造工藝的快速發展&#xff0c;仿真模擬的重要性日益凸顯&#xff0c;越來越多的科研及應用單位選擇在實際打印之前&#xff0c;通過仿真預測打印問題&#xff0c;從而優化打印工藝、減少物理試錯次數、降低打印成本。就不同增材工藝仿真的占比而言…

netxduo http server 創建回復以及json解析

我們今天要整http的response,比如我創建的http server,我對它發送了一個POST,然后服務器解析出json里的body,再回復過去。今天會用到json的解析庫cjson以及postman去發送消息。這次用nx_web_http_server.h這個庫,不用之前的nx_http_server.h 本教程在最后附帶app_netxduo…

大數據基礎:Doris重點架構原理

文章目錄 Doris重點架構原理 一、Apache Doris介紹 二、Apache Doris使用場景 三、Apache Doris架構原理 四、Apache Doris 特點 Doris重點架構原理 一、Apache Doris介紹 基于 MPP 架構的高性能、實時的分析型數據庫&#xff0c;以極速易用的特點被人們所熟知&#xff…

JVM---對象是否存活及被引用的狀態

1.如何判斷對象是否存活 1.1 引用計數算法 概念&#xff1a;在對象頭部增加一個引用計數器,每當有一個地方引用它時&#xff0c;計數器值就加一&#xff1b;當引用失效時&#xff0c;計數器值就減一&#xff1b;任何時刻計數器為零的對象就是不可能再被使用的。 優點&#xff1…

vue2遷移到vue3注意點

vue2遷移到vue3注意點 1、插槽的修改 使用 #default &#xff0c; 以及加上template 模板 2、 類型的定義&#xff0c;以及路由&#xff0c;vue相關資源&#xff08;ref, reactive,watch&#xff09;的引入等 3、類裝飾器 1&#xff09;vue-class-component是vue官方庫,作…

ubuntu搭建harbor私倉

1、環境準備 鏈接: https://pan.baidu.com/s/1q4XBWPd8WdyEn4l253mpUw 提取碼: 7ekx --來自百度網盤超級會員v2的分享 準備一臺Ubuntu 機器:192.168.124.165 將上面兩個文件考入Ubuntu上面 2、安裝harbor 安裝Docker Harbor倉庫以容器方式運行,需要先安裝好docker,參考:…

詳解python基本語法

文章目錄 數據變量數據結構 循環-判斷-用戶輸入判斷用戶輸入循環 函數參數返回值將函數存儲在模塊中 文件和異常讀取文件異常操作Json文件 類對象創建類使用類類的繼承導入外部類 測試測試函數創建測試 Python 是一種廣泛使用的高級編程語言&#xff0c;以其清晰的語法和代碼可…

which 命令在Linux中是一個快速查找可執行文件位置的工具

文章目錄 0、概念1、which --help2、which命令解釋 0、概念 which命令用于查找命令的可執行文件的路徑which 命令在 Linux 中用于查找可執行命令的完整路徑。當你在 shell 中輸入一個命令時&#xff0c;shell 會在環境變量 $PATH 定義的目錄列表中查找這個命令。which 命令可以…

React基礎學習-Day06

React基礎學習-Day06 zustand基本使用方式 1.基礎使用 基本使用 zustand 的步驟包括創建狀態存儲和在組件中使用這些狀態和更新函數。以下是一個基礎的示例&#xff0c;演示如何使用 zustand 來管理一個簡單的計數器狀態。 安裝 首先&#xff0c;確保你的項目中已經安裝了…

socket編程(2) -- TCP通信

TCP通信 2. 使用 Socket 進行TCP通信2.1 socket相關函數介紹socket()bind()listen()accept()connect()2.2 TCP協議 C/S 模型基礎通信代碼 最后 2. 使用 Socket 進行TCP通信 Socket通信流程圖如下&#xff1a; 這里服務器段listen是監聽socket套接字的監聽文件描述符。如果客戶…

Redis--布隆過濾器

解決緩存穿透是構建高效緩存系統中的關鍵問題之一。緩存穿透指的是惡意或者非法請求經過緩存層直接訪問數據庫或者后端服務&#xff0c;導致系統資源浪費和性能下降的情況。為了有效應對緩存穿透問題&#xff0c;以下是幾種常見的解決方法&#xff1a; 1. 布隆過濾器預檢查 布…

運維-Docker-黑馬

運維-Docker-黑馬 編輯時間&#xff1a;2024/7/15 來源&#xff1a;黑馬程序員 docker&#xff1a;快速構建&#xff0c;運行&#xff0c;管理應用的工具 Docker安裝 部署mysql 命令解讀

[Cesium for Supermap] 加載3dTiles,點擊獲取屬性

代碼&#xff1a; // 設為橢球var obj [6378137.0, 6378137.0, 6356752.3142451793];Cesium.Ellipsoid.WGS84 Object.freeze(new Cesium.Ellipsoid(obj[0], obj[1], obj[2]));var viewer new Cesium.Viewer(cesiumContainer);var scene viewer.scenescene.lightSource.ambi…

Oracle TDE(Transparent Data Encryption) 常見問題解答 - 官網

此FAQ來源于官網鏈接。此為新版&#xff0c;老版的博客參見Oracle TDE(Transparent Data Encryption) 常見問題解答。 通用問題 透明數據加密 (TDE) 提供什么功能&#xff1f; TDE 以透明方式加密 Oracle 數據庫中的靜態數據。它可以阻止操作系統未經授權嘗試訪問存儲在文件…

徹底改變時尚:使用 GAN 實現 AI 的未來

徹底改變時尚&#xff1a;使用 GAN 實現 AI 的未來 一、介紹 想象一下&#xff0c;在這個世界里&#xff0c;時裝設計師永遠不會用完新想法&#xff0c;我們穿的每一件衣服都是一件藝術品。聽起來很有趣&#xff0c;對吧&#xff1f;好吧&#xff0c;我們可以在通用對抗網絡 &a…