小课堂

为什么要使用memcache?memcashe有什么作用?

分享人:上海分院 唐坤

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

什么是memcache

memcache是一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数据全部丢失

2.知识剖析

memcache怎么实现高速缓存

首先了解cache

cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。

计算机存储器分为内存,外存,cache高速缓存.cache主要解决主存速度问题,虽然和外存比较,内存速度已经很快了,但是和cpu比较的话,主存速度一般只有cpu的1/10.所以要加一个高速缓冲存储器.把数据暂时存储在cache里.cpu从cache里取数据

memcache工作流程

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

知识点

1.memcached是键值一一对应

2. Memcached单进程在32位系统中最大使用内存为2G,若在64位系统则没有限制,这是由于32位系统限制单进程最多可使用2G内存,要使用更多内存,可以分多个端口开启多个Memcached进程 .

3.最大30天的数据过期时间,设置为永久的也会在这个时间过期

4.最大键长为250字节,默认是128字节

5.单个item最大数据是1MB,超过1MB数据不予存储

6.memcached分服务器端和客户端,可以配置多个服务器端和客户端,应用于分布式的服务非常广泛。

常用命令

Memcache::set -- 保存数据到Memcache服务器上

Memcache::get --提取一个保存在Memcache服务器上的数据

Memcache::replace --替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)

Memcache::delete -- 从Memcache服务器上删除一个保存的项目

Memcache::flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)

拓展思考

memcache和redis的区别

什么是reidis

Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。
区别: 1.由于Redis只使用单核,而Memcached可以使用多核

2. redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化.而memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小

3.redis在数据支持上要比memecache多的多,Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

总结:有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其他简单的key/value存储,选择memcache。

7.参考文献

参考一:百度

8.更多讨论

欢迎大家交流和讨论

鸣谢

感谢大家观看

BY : 唐坤