MemCache是一个自由、源码开放、高性能、分布式的内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。
Memcache通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数据全部丢失
Memcache和memcached区别?
Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名。
一个是项目名称,一个是主程序文件名(守护进程)。
Memcache的实现原理
memcache处理的原子是每一个key、val,key会通过一个hash表转换成hash的key,便于查找对比以及竟可能的做到散列。
同时mem用的是一个二级散列,通过一个hash表来维护。memcache有两个核心组件:服务端和客户端。
在一个memcache组件查询中,client先通过key的hash值来确定kv在service端的位置,当server端确定后,客户端就会发一个请求个server端。
让它来查找出确切数据,因为这之间没有交互以及多播协议,因此mem带给网络的影响最小。
memcached存储方式
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
常用命令
set -- 保存数据到Memcache服务器上
get --提取一个保存在Memcache服务器上的数据
replace --替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
delete -- 从Memcache服务器上删除一个保存的项目
flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
1.用序列化和反序列化储存对象
2.Memcached Client目前有3种: Memcached Client for Java, SpyMemcached, XMemcached。
① Memcached Client for Java:
较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定
②SpyMemcached:
支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常。
③XMemcached:
同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比Spymemcached的表现更为优秀。
memcache和redis的区别
Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符
串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。
1.由于Redis只使用单核,而Memcached可以使用多核
2. redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化.而memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。
3.redis在数据支持上要比memecache多的多,Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
memcached
http://www.runoob.com/memcached/memcached-tutorial.html
https://blog.csdn.net/weixin_41910244/article/details/80412209