1.为什么要使用memcache?memcache有什么作用?

大家好,我是IT修真院武汉分院第13期的学员,一枚正直纯洁善良的程序员今天给大家分享一下,修真院官网Java任务6中的拓展思考:为什么要使用memcache?memcashe有什么作用?

1.背景介绍

MemCache是一个自由、源码开放、高性能、分布式的内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。

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

2.知识剖析

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服务器上保存的项目(类似于删除所有的保存的项目)



3.常见问题 

1.memcache如何储存java对象?

2.memcached对java客户端有哪几种,各有什么优缺点,我该怎么选?

4.解决方案

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的表现更为优秀。

5.编码实战

6.拓展思考

memcache和redis的区别

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.参考文献

   memcached

http://www.runoob.com/memcached/memcached-tutorial.html

https://blog.csdn.net/weixin_41910244/article/details/80412209


8.  截图



                                                                                                                                        鸣谢

                                                                                                                            感谢观看,如有出错,恳请指正

                                                                                                                                    BY : 白晨松


                                                                                                                





猜你喜欢

转载自blog.csdn.net/qq_39691226/article/details/80796062