memcache

原创
2015/11/16 16:33
阅读数 188

概念:

  • 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
展开阅读全文
打赏
0
8 收藏
分享
加载中
更多评论
打赏
0 评论
8 收藏
0
分享
返回顶部
顶部