Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Memcached相关内容总结

Memcached相关内容总结

作者头像
代码改变世界-coding
发布于 2018-08-15 03:19:45
发布于 2018-08-15 03:19:45
50000
代码可运行
举报
文章被收录于专栏:java相关java相关
运行总次数:0
代码可运行
1.Memcached常用命令总结

Memcached命令格式一般为: command 其中描述如下:

参数

描述

command

操作命令,一般为set/add/replace/get/delete等

key

缓存的key,Memcache内部限制不能超过250个字符,

flag

标识数据格式,比如JSON、XML等

expiration time

过期时间,单位为s,0为不过期,最好设置过期时间,以免保存大量无效数据,最大过期时间为30天,超过30天则缓存获取不到

bytes

字节数,比如1234,则字节数为4

value

缓存中的值

比如以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set name 0 0 4 test// key 为name,value为test,字节数4个,缓存不过期

常用命令列表如下:

命令

描述

set

添加或者更新

get

获取数据

add

数据不存在的时候添加

replace

数据存在的时候替换value的值

append

后面追加

prepend

前面追加

2.Memcached主要特征

1.协议简单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server和client的通信并不使用复杂的XML或者json协议,而是使用简单的文本协议和二进制协议

2.内置内存存储方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Memcached是纯内存存储,不支持持久化,因此当Memcached重启或者机器重启的时候所有数据会丢失。

因此会存在数据重启无法恢复的问题

3.Memcached使用客户端分布式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Memcached服务端没有分布式的功能,各个实例之间并不会互相通信或者数据共享,因此需要依赖客户端实现分布式。
3.Memcached存在的问题
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.因此会存在数据重启无法恢复的问题  

可以通过配合持久化数据库MemcachedDB使用  

2.无法通过key做范围查询

3.没有提供高可用相关支持,只能通过客户端逻辑来处理,比如写入的时候同时写入主备服务器
4.Memcached内存存储分析

Memcached使用Slab Allocator机制分配和管理内存,这种分配机制可以减少内存碎片的产生,减轻系统管理内存的负担。

Slab Allocator的分配机制其实很简单,就是将内存分割成各种尺寸的内存快(Chunk)并将尺寸相同的内存块分组Slab Class。其中分配的快可以重新利用,不会释放到内存中。 其中分配给Slab Class的内存空间为Page(默认大小为1MB)。 内存分配结构大致如下:

分配的内存快大小目前默认最小内存块为:88Bytes,Growth Factor决定了内存块增长的幅度,默认值为1.25,可以通过启动参数配置。

这种分配方式在一定程度上也会造成内存的浪费,比如要保存100字节的数据的时候,只能放到112Bytes的内存块中,剩余的12Byte内存空间被浪费。

结构中各个部分数量的计算:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page个数 = 内存总空间 / 1MB
各个Page中Chunk的个数 = 1MB / Chunk的大小
Chunk大小计算 = 初始值 * Growth Factor

当设置缓存的时候,会根据Item的大小来决定保存到那个Slab Class中,其中Item大小为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
key长 + value长度 + 后缀长度 + item长度大小(32个字节)

其中Memcached可以保存的数据Item最大为1MB。

5.Memcached典型问题分析

对于Memcached的使用中一般会出现以下问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. 容量问题
单一节点无法突破内存上限
2. 服务高可用
服务宕机会导致访问全部穿透数据库
3. 扩展问题
无法突破单实例请求峰值

Memcached当达到内存上线的时候,会对内存数据进行垃圾回收,垃圾回收有两种方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.Lazy模式,Memcached不会自动去检查数据的过期情况,而是在查询的时候,检查数据的过期情况,然后对数据进行相应处理。
2.使用LRU算法进行内存垃圾回收(最近最少使用算法)
其中垃圾回收是在Slab Class范围内的,并不是全局的LRU

对于Memcached使用集群的方式,有两种算法来计算缓存落在那一台缓存机器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
方法一: key.hashCode() / 缓存节点个数
缺点:当对分布式缓存中添加、删除或者节点故障剔除操作中,会导致所有的历史数据都无法找到
方法二:使用一致性哈希算法可以解决1中的问题
数据一致性问题怎么解决
key冲突的问题解决

可以使用明明空间,对于不同的系统,使用不同的明明空间,比如前缀:ns_

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详解 Nginx 和 php-fpm 调用方式
PHP 项目使用 Nginx 时,一般通过 php-fpm Nginx+PHP-FPM 形式访问交互,本文将详细解读 Nginx 配置文件、PHP-FPM、PHP-CGI 和 fastCGI 的概念。
Yangsh888
2022/03/28
2.7K0
PHP-FPM+Nginx通信原理
用了这么久了PHP+Nginx了,你了解他们之间的通信原理吗?这一次做一回真正的PHPer(在上一篇文章里边已经全面介绍了CGI、FastCGI、PHP-FPM,所以本文对于这些概念不再介绍的那么详细)
猿哥
2019/11/23
1.5K0
nginx和php-fpm通信,使用unix socket还是TCP及其配置
nginx和fastcgi的通信方式有两种,一种是TCP的方式,一种是unix socke方式。两种方式各有优缺点,这里先给出两种的配置方法,然后再对性能、安全性等做出总结。
lukachen
2023/10/22
1.6K0
PHP进程管理器php-fpm配置说明
php-fpm是PHP的一个进程管理器。php下面的众多work进程皆由php-fpm进程管理器管理。具体可参考:http://www.qqdeveloper.com/2019/10/06/CGI-FastCGI-php-fpm/
兔云小新LM
2020/05/27
2.3K0
【高级】PHP-FPM和Nginx的通信机制
每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服务器上的解析需要用到 PHP 解释器,再加上对应的 CGI 协议,从而使服务器可以解析到 PHP 文件。
全栈程序员站长
2022/07/08
4750
【高级】PHP-FPM和Nginx的通信机制
Nginx与php-fpm之间的通信机制(一)
讲Fastcgi之前需要先讲CGI,CGI是为了保证web server传递过来的数据是标准格式的,它是一个协议。每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服务器上的解析需要用到 PHP 解释器,再加上对应的 CGI 协议,从而使服务器可以解析到 PHP 文件。
兔云小新LM
2019/12/19
2.6K1
LNMP出现502 bad gateway的解决
问题:最近的抢购有点火,到点抢购的时候网站就会出现502 bad gateway错误 顶不住消费者的压力。
星哥玩云
2022/07/03
5250
LNMP出现502 bad gateway的解决
PHP-FPM 性能配置优化
php-fpm 全称是 PHP FastCGI Process Manager 的简称,从名字可得知,是一个 FastCGI 的管理器。
南山竹
2024/06/12
2300
PHP-FPM 性能配置优化
PHP-FPM多方面调优策略
FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。比方说: 支持平滑停止/启动的高级进程管理功能、文件上传优化支持、stdout 和 stderr 日志记录等等,更多请移步官网 https://www.php.net/manual/zh/install.fpm.php
憧憬博客
2020/07/21
8910
php-fpm报502问题「建议收藏」
搭建lnmp完lnmp环境后,测试时出现502报错,看到这个问题,我立刻想到是php-fpm没有起来,但是我用 ps -ef | grep php-fpm 截取 php-fpm 的进程,发现是有的,这时我有查看nginx的错误日志,发现错误信息是:
全栈程序员站长
2022/07/18
4820
php-fpm报502问题「建议收藏」
php-fpm – 配置详解
pid = run/php-fpm.pid pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启
Java架构师必看
2021/03/22
1.7K0
PHP7中php.ini、php-fpm和www.conf 配置
php.ini是php运行核心配置文件,下面是一些常用配置 extension_dir="" 设置PHP的扩展库路径 expose_php = Off 避免PHP信息暴露在http头中 display_errors = Off 避免暴露php调用mysql的错误信息 log_errors = On 在关闭display_errors后开启PHP错误日志(路径在php-fpm.conf中配置) zend_extension=opcache.so extension=mysqli.so
conanma
2021/12/02
1.7K0
php-fpm优化总结
Nginx 与 php-fpm 的结合 在 Linux 上,nginx 与 php-fpm 的通信有 tcp socket 和 unix socket 两种方式。 tcp socket 的优点是可以跨服务器,当 nginx 和 php-fpm 不在同一台机器上时,只能使用这种方式。 Unix socket 又叫 IPC (inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信,这种方式需要在 nginx 配置文件中填写 php-fpm 的 socket 文件位置。
ITer.996
2022/11/22
1.3K0
php-fpm优化总结
linux学习第四十八篇:php-fpm的pool,php-fpm慢执行日志,定义open_basedir,php-fpm进程管理
php-fpm的pool Nginx可以配置多个虚拟主机,php-fpm同样也支持配置多个pool,每一个pool可以监听一个端口,也可以监听一个socket。 vim /usr/local/php/etc/php-fpm.conf 在[global]部分增加: include = etc/php-fpm.d/*.conf 创建php-fpm.d目录: mkdir /usr/local/php/etc/php-fpm.d 进入目录: cd /usr/local/php/etc/php-fp
用户1215343
2018/02/05
7550
linux学习第四十八篇:php-fpm的pool,php-fpm慢执行日志,定义open_basedir,php-fpm进程管理
一条502报警引发的胡思乱想
就在安心养神的时候, 同事转给了我一条nginx 502的报警, 赶紧去线上一顿排查。
用户2825413
2019/07/16
6770
一条502报警引发的胡思乱想
LNMP环境下Nginx中php-fpm的配置文件讲解
一、nginx配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 user nobody nobody; worker_processes 2; error_log /usr/local/nginx/logs/nginx_error.log crit; pid /usr/local/nginx/
老七Linux
2018/05/09
2K1
了解PHP-FPM
在服务器上,当我们查看php进程时,全都是php-fpm进程,大家都知道这个就是php的运行环境,那么,它到底是个什么东西呢?
硬核项目经理
2019/11/19
1.6K0
PHP-FPM没有生成socket文件
/tmp目录权限1777,正常,这里只能是1777,其他的0777什么的都不行,会给系统带来各种问题.
OwenZhang
2021/12/08
9430
PHP-FPM
PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。
友儿
2022/09/11
9770
php-fpm的pool,php-fpm慢执行日志,open_basedir,php-fpm进程管理
php-fpm的pool: php-fpm的pool是这个php-fpm服务的池子,php-fpm支持定义多个池子,能够监听多个不同的sock或者监听不同的ip。如果Nginx上跑了几个站点,每个站点
叶瑾
2018/06/14
1.2K0
推荐阅读
相关推荐
详解 Nginx 和 php-fpm 调用方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验