大家好,我是IT修真院郑州分院第8期学员,一枚正直善良的java程序员。今天给大家分享一下,修真院官网 java任务中可能会使用到的知识点:
为什么要使用memcache?memcache有什么作用?
【修真院java小课堂】为什么要使用memcache?memcache有什么作用?20180611
1.背景介绍
memcache是什么?
- memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。这是一套开放源代码软件,以BSD license授权发布。
2.知识剖析
2.1 memcache作用是什么?
- Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
2.2 工作流程
- 1.先检查客户端的请求数据是否在memcached中
- 2.如有,直接把请求数据返回,不再操作数据库
- 3.如果请求的数据不在memcached中,就去查数据库
- 4.把从数据库中获取的数据返回给客户端,
- 5.同时把数据缓存一份到memcached中
- 6.更新数据库的时更新memcached中的数据,保证一致性
- 7.当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,
- 8.失效数据首先被替换,然后再替换掉最近未使用的数据。
2.3 优缺点/限制
- 限制:在 Memcached中可以保存的数据量是没有限制的,只要内存足够。
- 优点:高速、分布式
- 缺点:缓存、性能消耗、空间换时间
3.常见问题
3.1踩坑:对象序列化
- memcached存储对象的时候,对象需要序列化
- public class Student implements Serializable
3.2什么是对象序列化
- Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。
4.编码实战
- 百万级数据无索引,使用memcached做缓存,时间量级
- 见视频
5.扩展思考
5.1 应用场景
部分容灾
- 假设只用一台memcache,如果这台memcache服务器挂掉了,那么请求将不断的冲击数据库,这样有可能搞死数据库,从而引发”雪崩“。如果使用多台memcache服务器,由于memcache使用一致性哈希算法,万一其中一台挂掉了,部分请求还是可以在memcache中命中,为修复系统赢得一些时间。
部分容灾
- 一台memcache服务器的容量毕竟有限,可以使用多台memcache服务器,增加缓存容量。
部分容灾
- 使用多台memcache服务器,可以均衡请求,避免所有请求都冲进一台memcache服务器,导致服务器挂掉。
6.参考文献
https://baike.baidu.com/item/MemCache/8250931?fr=aladdin
https://blog.csdn.net/MsdnWoo/article/details/51577389
https://www.jianshu.com/p/b882a4f2e788
https://blog.csdn.net/wusuopuBUPT/article/details/18238003
7.更多讨论
Q:存入memcache的数据是否有生命周期的设置?
A:在set写入缓存数据的时候,可以使用参数进行设置
Q:什么样的数据适合写入缓存
A:访问频率高、修改频率低、数据量小的数据
Q:memcache存储的最小单位是多大?
A:单个item最大数据是1MB,超过1MB数据不予存储