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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
memcached服务
介绍 它是一套数据缓存系统或软件 用于动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升性能的效果,实际应用环境中多用于数据库的cache的应用。它是通过预分配指定的内存空间来存储数据 定义 它是一个开源的、高性能的,具有分布式内存对象的缓存系统,它一般用来存储经常读取的对象或数据,如同web服务器会将一些内容缓存到客户端本地一样 mysql已经有cache了,为啥还要在它前面加一层memcached? memcached是一个key/value系统,系统相对于MySQL简单很多,虽然MySQL
用户1173509
2018/03/28
1.1K0
memcached服务
Memcached 内存分配机制介绍
最近的memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存。在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的。但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下,会导致操作系统比memcached进程本身还慢。Slab Allocator就是为解决该问题而诞生的。
黄规速
2022/04/14
7240
Memcached 内存分配机制介绍
Memcache存储机制与指令汇总
  memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
那一叶随风
2018/08/22
5350
Memcache存储机制与指令汇总
纯干货!-- Memcache详解
网址:http://www.cnblogs.com/xrq730/p/4948707.html
后端技术探索
2018/08/09
4390
缓存使用中Redis,Memcached的共性和差异分析
1.Memcached与Redis都属于内存内、键值数据存储方案,都是nosql数据库中的杰出代表。
brookwang
2022/06/24
5040
memcached架构及缓存策略
----------------------------------------概述----------------------------------------
星哥玩云
2022/07/26
7450
memcached架构及缓存策略
两个通宵熬出来的互联网大厂最新面试题收集整理1000道(三-Memcached),欢迎点赞收藏!!!
  最近接触到很多面试相关的内容,所以就专门整理了以下,内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈。 后续会出专门的面试视频专题,欢迎关注。
用户4919348
2021/06/29
3560
Redis 和 Memcached 的区别
说到redis就会联想到memcached,反之亦然。了解过两者的同学有那么个大致的印象:redis与memcached相比,比仅支持简单的key-value数据类型,同时还提供list,set,zset,hash等数据结构的存储;redis支持数据的备份,即master-slave模式的数据备份;redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用等等,这似乎看起来redis比memcached更加牛逼一些,那么事实上是不是这样的呢?存在即合理,我们来根据几个不同点来
wangxl
2018/03/09
1.3K0
Redis 和 Memcached 的区别
Memcached内存管理源码分析
memcached内存管理的模型与作业本“画格子给我们往格子里面写字”的逻辑很像,一个个作业本就是我们的内存空间,而我们往里写的字就是我们要存下来的数据,所以分析的时候可以想像一下用方格作业本写字的情景
JavaEdge
2019/02/15
5430
Memcached内存管理源码分析
Redis 和 Memcached 的区别详解
Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较:
哲洛不闹
2018/09/18
6130
Redis 和 Memcached 的区别详解
Memcached基础了解
什么是NoSQL? 关系型数据库代表MySQL。 非关系型数据库就是NoSQL。 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗费时间和资源,尤其是数据是需要从磁盘里去检索。 NoSQL非关系型数据库存储原理非常简单(典型的数据类型为k-v)(key-value),不存在繁杂的关系链,比如mysql查询的时候,需要找到对应的库、表(通常是多个表)以及字段。 NoSQL数据可以存储在内存里,查询速度非常快。 NoSQL在性能表现上虽然能优
老七Linux
2018/05/31
5260
Memcached命令
memcached 1.4.3 -p <num> 设置端口号(默认不设置为: 11211) -U <num> UDP监听端口 (默认: 11211, 0 时关闭) -l <ip_addr> 绑定地址 (默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问) -d 独立进程运行 -u <username> 绑定使用指定用于运行进程 <username> -m <num> 允许最大内存用量,单位M (默认: 64 MB) -P <file> 将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与 -d 一起使用 如: 在linux下:./usr/local/bin/memcached -d -u jb-mc -l 192.168.1.197 -m 2048 -p 12121 在window下:d:\App_Serv\memcached\memcached.exe -d RunService -l 127.0.0.1 -p 11211 -m 500 在windows下注册为服务后运行: sc.exe create jb-Memcached binpath= "d:\App_Serv\memcached\memcached.exe -d RunService -p 11211 -m 500" start= auto net start jb-Memcached
黄规速
2022/04/14
6730
Memcached缓存
memcached是应用较广的开源分布式缓存产品之一,它本身其实不提供分布式解决方案。 在服务端,memcached集群环境实际就是一个个memcached服务器的堆积,环境搭建较为简单。 cache的分布式主要是在客户端实现,通过客户端的路由处理来达到分布式解决方案 客户端做路由的原理非常简单: 应用服务器在每次存取某key的value时,通过某种算法把key映射到某台memcached服务器nodeA上,因此这个key所有操作都在nodeA上
JavaEdge
2021/02/23
6130
Memcached缓存
Memcache的内存管理和删除机制
如果c语言直接向系统malloc,free申请和释放内存时,在不断的申请和释放的过程中,形成了一些很小的内存片段,无法再利用,这种空闲,但无法利用内存的现象,---成为内存的碎片化
程序员小饭
2020/09/07
5950
nosql介绍,memrcached介绍,安装memcached,查看memcachedq状态
NoSQL(Not Only SQL)意即“不仅仅是SQL”,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。与之相对应的关系型数据库代表是:mysql、oracle、sql server等。
端碗吹水
2020/09/23
4900
nosql介绍,memrcached介绍,安装memcached,查看memcachedq状态
Memcached的LRU策略
从 Memcached1.5 开始,实现了一个改良的 LRU 算法,也叫做分段 LRU(Segmented LRU)算法,新算法主要是为了更好的利用内存,并提升性能。包含了二个重要的线程:maintainer 线程、crawler 线程。
tunsuy
2022/10/27
7660
memcached
  许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。memcac
Mister24
2018/05/14
1.1K0
Memcache内存分配机制
memcached 默认情况下采用了 Slab Allocator 的机制分配和管理内存. 在该机制出现之前内存分配简单的通过 malloc 和 free 来管理所有的记录, 旧的方式会导致产生很多内存碎片, 加重机器管理内存的负担, 甚至有可能导致操作系统比 memcached 进程本身还慢, Slab Allocator 则解决了该问题.
tunsuy
2022/10/27
7920
Memcached 常用指令
3、replace 命令 Memcached replace 命令用于替换已存在的 key( 键) ) 的 value( 数据值) )。 如果 key 不存在,则替换失败,并且将获得响应 NOT_STORED。
小手冰凉
2020/02/15
1.5K0
Memcache存储大数据的问题
Memcached存储单个item最大数据是在1MB内,如果数据超过1M,存取set和get是都是返回false,而且引起性能的问题。
黄规速
2022/04/14
4950
相关推荐
memcached服务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验