1 Memcached概念
Memcache官网地址: http://www.memcached.org/,由LiveJournal的Brad Fitzpatrick开发,是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HASH表,该表以Key-value对的方式存在内存中。 也称K-V 数据库或缓存数据库。
memcached主要使用于存储实时性要求不是很高的信息。
2 Memcached特征
协议简单:
它是基于文本行的协议,直接通过telnet在memcached服务器上可进行存取数据操作.
基于libevent事件处理:
Libevent是一套利用C开发的程序库,它将BSD系统的kqueue,Linux系统的epoll等事件处理功能封装成一个接口,与传统的select相比,提高了性能。
内置的内存管理方式:
所有数据都保存在内存中,存取数据比硬盘快,当内存满后,通过LRU算法自动删除不使用的缓存,但没有考虑数据的容灾问题,重启服务,所有数据会丢失。
分布式:
各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息。服务器并不具有分布式功能,分布式部署取决于memcache客户端。
3 使用场景
例如一个电子商务网站,在网站的左侧会是商品的分类,中间是商品搜索结果的列表,可以查看商品信息和商家的基本信息和相关商家的信誉度信息。在这个场景下,因为一个商场的类别不会经常改变的。实时性不是很高,这样应该放到缓存中取的。
一般时候做法:
执行一次或者多次sql从数据库中查询全站的商品分类---->>递归形成你所需的分类tree------>>进入处理数据------->>显示到页面上。
在使用 memcached做法:
第一次显示的时候:判断memcached缓存中是否有该分类----没有----->执行一次或者多次sql从数据库中查询全站的商品分类 ----->放到memcached中------->>进入处理数据------->>显示到页面
第二次显示的判断memcached缓存中是否有该分类----有--->>-从memcached中取出数据-------->>进入处理数据------->>显示到页面
当这个过程首次发生时,数据将正常地从数据库或其他数据源加载,然后再存储到 memcached 内。当下一次访问此信息时,它就会从 memcached 中取出,而不是从数据库加载,节省了时间和 CPU 循环。
但是要是数据中的数据改变怎么来更新memcached中的数据呢
过程为:更新数据库中分类的信息------->找到memcached中key值,删除------>重新插入到你的memcached中就可以了
memcached 内的存储操作是原子的,所以信息的更新不会让客户机只获得部分数据;它们获得的或者是老版本,或者是新版本。