memcached
- 基礎概念
- 安裝使用
基礎概念
Memcached 是一個高性能的分布式內存對象緩存系統,用于減少數據庫負載,加速動態 Web 應用。
Memcached 的基本概念
- 緩存:Memcached 的核心功能是緩存數據,它將經常訪問的數據存儲在內存中,從而減少數據庫的負載,提高數據讀取速度。
- 分布式:Memcached 設計為分布式系統,可以將數據分布在多臺服務器上,從而提升緩存系統的整體容量和性能。
工作原理
1,鍵值對存儲
Memcached 使用鍵值對存儲數據:
- 鍵(Key):一個唯一的標識符,用于檢索數據。
- 值(Value):實際存儲的數據,可以是任何二進制數據(字符串、對象等)。
2,哈希算法
Memcached 使用一致性哈希算法將數據分布到不同的服務器上:
- 一致性哈希:通過哈希函數將鍵映射到特定的緩存服務器上,保證數據分布的均勻性和負載的均衡性。
3,內存管理
Memcached 采用 LRU(Least Recently Used,最近最少使用)策略管理內存:
- LRU策略:當內存不足時,Memcached 會刪除最早未被訪問的數據,以騰出空間存儲新的數據。
優點
- 高性能:由于數據存儲在內存中,讀寫速度極快,通常在毫秒級別。
- 擴展性:通過增加服務器,可以線性擴展緩存容量和處理能力。
- 簡單易用:Memcached 提供了簡單的API,并且有豐富的客戶端庫支持多種編程語言。
應用場景
- Web應用加速:緩存數據庫查詢結果、API響應等,提高網頁響應速度,減輕數據庫負載。
- 會話存儲:將用戶會話數據存儲在內存中,提供快速訪問,常用于分布式Web應用。
- 臨時數據存儲:適用于需要快速訪問但不需要持久保存的數據,如臨時計算結果、頻繁更新的數據等。
安裝使用
Ubuntu2204安裝
apt install -y memcached
systemctl enable --now memcached
對memcached文件進行參數配置
vi /etc/memcached.conf
-m 64:指定 Memcached 使用的最大內存為 64 MB。注意,這個值是 Memcached 可以增長到的大小,而不是啟動時立即占用的大小。
-p 11211:指定 Memcached 的默認監聽端口為 11211。
-u memcache:指定運行 Memcached 的用戶為 memcache。如果沒有指定該參數,默認會以 root 用戶運行。
-l 127.0.0.1:指定 Memcached 監聽的 IP 地址為 127.0.0.1(本地回環地址),只允許本地訪問。
-c 1024:限制同時接受的最大連接數為 1024。默認情況下,這一行是注釋掉的,意味著使用守護進程的默認值
當在配置文件中修改參數后需要重啟生效
systemctl restart memcached.service
命令運行測試
以守護進程方式運行,最大內存128MB,監聽0.0.0.0,端口11212、指定連接限制為2048,使用8個線程,塊大小增長因子為1.5,最大項目大小為2MB并以詳細模式輸出:
memcached -d -u memcache -m 128 -l 0.0.0.0 -p 11212 -c 2048 -t 8 -f 1.5 -I 2m -v
但是使用命令發現一個問題!!就是不會實際生效,只會增加一個進程,暫時不能理解這個問題,如果需要對實際服務進行配置,還是編輯配置文件
例如,我修改配置文件;指定最大內存,監聽地址等,可以在服務中查看到
root@huhy:~# systemctl restart memcached.service
root@huhy:~# systemctl status memcached
● memcached.service - memcached daemonLoaded: loaded (/usr/lib/systemd/system/memcached.service; enabled; preset: enabled)Active: active (running) since Thu 2024-06-27 10:02:52 UTC; 2s agoDocs: man:memcached(1)Main PID: 3426 (memcached)Tasks: 10 (limit: 4556)Memory: 1.8M (peak: 2.7M)CPU: 24msCGroup: /system.slice/memcached.service└─3426 /usr/bin/memcached -m 128 -p 11213 -u memcache -l 0.0.0.0 -l ::1 -P /var/run/memcached/memcached.pid
使用命令后;并沒有實際修改,反而添加了一個額外的端口和進程
root@huhy:~# memcached -d -u memcache -m 128 -l 0.0.0.0 -p 11212 -c 2048 -t 8 -f 1.5 -I 2m -v
root@huhy:~# systemctl status memcached.service
● memcached.service - memcached daemonLoaded: loaded (/usr/lib/systemd/system/memcached.service; enabled; preset: enabled)Active: active (running) since Thu 2024-06-27 10:02:52 UTC; 7min agoDocs: man:memcached(1)Main PID: 3426 (memcached)Tasks: 10 (limit: 4556)Memory: 1.8M (peak: 2.7M)CPU: 77msCGroup: /system.slice/memcached.service└─3426 /usr/bin/memcached -m 32 -p 11213 -u memcache -l 127.0.0.1 -l ::1 -P /var/run/memcached/memcached.pid
Jun 27 10:02:52 huhy systemd[1]: Started memcached.service - memcached daemon.
root@huhy:~# ss -tlun | grep 11
tcp LISTEN 0 1024 0.0.0.0:11213 0.0.0.0:*
tcp LISTEN 0 1024 0.0.0.0:11212 0.0.0.0:*
tcp LISTEN 0 1024 [::1]:11213 [::]:*
root@huhy:~# ps -aux| grep mem
memcache 3426 0.0 0.1 412124 4736 ? Ssl 10:02 0:00 /usr/bin/memcached -m 128 -p 11213 -u memcache -l 0.0.0.0 -l ::1 -P /var/run/memcached/memcached.pid
memcache 3470 0.0 0.0 707740 3132 ? Ssl 10:10 0:00 memcached -d -u memcache -m 128 -l 0.0.0.0 -p 11212 -c 2048 -t 8 -f 1.5 -I 2m -v
root 3498 0.0 0.0 6544 2304 pts/0 S+ 10:12 0:00 grep --color=auto mem
root@huhy:~#