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:~#