文档章节

memcache

NikoTesla
 NikoTesla
发布于 2015/11/16 16:33
字数 1413
阅读 79
收藏 9

概念:

  • Memcached是⾼性能的,分布式的内存对象缓存系统,⽤于在动态应用中减少数据库负载,提升访问速度。
  • Memcached是⼀个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像⼀张巨⼤的HASH表,该表以Key-value对的方式存在内存中。

官网地址: http://www.memcached.org/

适用场合

  • 分布式应用: 由于memcached本身基于分布式的系统,所以尤其适合⼤型的分布式系统。
  • 数据库前段缓存: 数据库常是网站系统的瓶颈。数据库的⼤并发量访问,常造成网站内存溢出。当然我们也可以使用Hibernate的缓存机制。但 memcached是基于分布式的,并可独立于网站应用本身,所以更适合大型⺴站进⾏应⽤的拆分。
  • 服务器间数据共享: 举例来讲,我们将网站的登录系统、查询系统拆分为两个应用,放在不同的服务器上,并进⾏集群,那这个时候⽤户登录后,登录信息如何从登录系统服务器同步到查询系统服务器呢?这时候,我们便可以使用memcached,登录系统将登录信息缓存起来,查询系统便可以获得登录信息,就像获取本地信息一样。

不适⽤场合

那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源

操作流程:

mecache操作流程

  1. 检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作,路径操作为①②③⑦。
  2. 如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),路径操作为①②④⑤⑦2。
  3. 每次更新数据库的同时更新memcached中的数据,保证一致性。
  4. 当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。

Memcache特征:

  • 协议简单 它是基于文本行的协议,直接通过telnet在memcached服务器上可进行存取数据操作

  • 基于libevent的事件处理 在Linux环境下应用Memcache时,Memcache用到了libevent这个库,用于Socket的处理,所以还需要安装libevent。

  • 内置的内存管理方式 所有数据都保存在内存中,存取数据比硬盘快,当内存满后,通过LRU算法自动删除不使用的缓存,但没有考虑数据的容灾问题,重启服务,所有数据会丢失。

  • 分布式 各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息。服务器并不具有分布式功能,分布式部署取决于memcache客户端。

Memcached安装与启动:

方法一,下载压缩包,解压,安装 1.安装memcached需要先安装libevent 2.安装memcached 3启动memcached

Shell>/usr/local/memcached/bin/memcached -p 11211 -d -u root -P /tmp/memcached.pid

-P是表示使用TCP,默认端口为11211 
-d表示后台启动一个守护进程(daemon) 
-u表示指定root用户启动,默认不能用root用户启动 
-P表示进程的pid存放地点,此处“p”为大写“P” 
-l后面跟IP地址,手工指定监听IP地址,默认所有IP都在监听 
-m后面跟分配内存大小,以MB为单位,默认为64M -c最大运行并发连接数,默认为1024 -f 块大小增长因子,默认是1.25 -M内存耗尽时返回错误,而不是删除项,即不用LRU算法 
-h 显⽰示帮助 
-d start 启动memcached服务 
-d restart 重起memcached服务 
-d stop|shutdown 关闭正在运⾏行的memcached服务 
-d install 安装memcached服务 
-d uninstall 卸载memcached服务

方法二: 参考memcache官网安装方法

命令行直接操作命令

Command	Description	Example
get	Reads a value	get mykey
set	Set a key unconditionally	set mykey 0 60 5
add	Add a new key	add newkey 0 60 5
replace	Overwrite existing key	replace key 0 60 5
append	Append data to existing key	append key 0 60 15
prepend	Prepend data to existing key	prepend key 0 60 15
incr	Increments numerical key value by given number	incr mykey 2
decr	Decrements numerical key value by given number	decr mykey 5
delete	Deletes an existing key	delete mykey
flush_all	Invalidate specific items immediately	flush_all
flush_all	Invalidate all items in n seconds	flush_all 900
version	Prints server version.	version
verbosity	Increases log level	verbosity
quit	Terminate telnet session	quit
stats	Prints general statistics	stats
显示slabs信息,可以详细看到数据的分段存储情况	stats slabs
Resets statistics	Stats reset
Prints memory statistics	stats malloc
Print higher level allocation statistics	stats items
列出slabs第一段里存的KEY值	Stats cachedump 1 0
表示要腾出新空间给新的item而移动的合法item数目STAT	evictions 0
stats sizes

实例操作:

一、先连接到memcache

shell>telnet 127.0.0.1 11211

二、存⼊数据

Set baidu 0 0 14 www.baidu.com 

回车后系统自动保存,并返回正常值STORED 存入命令格式为

<command> <key> <flags> <exptime> <bytes> \r\n

注意 在设定bytes字节后,存入的值的长度一定要与之匹配,否则无法保存成功,如百度字段设置为14字节,所以存入的www.baidu.com长度为14。

三、取数据

get baidu

© 著作权归作者所有

下一篇: mongo
NikoTesla
粉丝 4
博文 57
码字总数 12246
作品 0
东城
程序员
私信 提问
Memcache所有方法及参数详解以及使用方法

参考http://www.php.net/manual/zh/function.Memcache-add.php Memcache::add - 添加一个值,如果已经存在,则返回false Memcache::addServer - 添加一个可供使用的服务器地址 Memcache::cl...

zchd
2013/02/21
0
0
php的Memcache方法介绍及应用实例

Memcache::add // 添加一个值,如果已经存在,则返回false Memcache::addServer // 添加Memcache地址 Memcache::close // 关闭一个Memcache的连接 Memcache::connect // 打开一个到Memcache的...

liupengv5
2012/11/20
133
0
PHP MEMCACHE 详解 php缓存

Memcache函数库是在 PECL(PHP Extension Community Library)中,主要作用是搭建大容量的内存数据的 临时存放区域,在分布式的时候作用体现的非常明显,否则不建议使用。 本人在ubuntu上安装 ...

啊和
2012/07/27
59
0
PHP Memcache 缓存

<?php PHP下memcache模块是一个高效的守护进程,提供用于内存缓存的过程式程序和面向对象的方便的接口,特别是对于设计动态web程序时减少对数据库的访问。memcache也提供用于通信对话(sessi...

刘海鹏-Haipeng
2012/09/29
316
0
PHP中Memcache类函数详解

Memcache类函数列表如下: Memcache::add – 添加一个值,如果已经存在,则返回false Memcache::addServer – 添加一个可供使用的服务器地址 Memcache::close – 关闭一个Memcache对象 Memc...

Junn
2015/01/06
281
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
537
8
oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
3
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
聊聊DubboDefaultPropertiesEnvironmentPostProcessor

序 本文主要研究一下DubboDefaultPropertiesEnvironmentPostProcessor DubboDefaultPropertiesEnvironmentPostProcessor dubbo-spring-boot-project-2.7.3/dubbo-spring-boot-compatible/au......

go4it
昨天
2
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部