Memcache
是一套分布式的高速缓存系统,也即:高性能的分布式的内存对象缓存系统,被许多网站使用以提升网站的访问速度。
服务器互不通信,由于程序实现分布式,考虑算法分散存储压力和考虑算法的命中率。程序执行流程如下:
- 先检查客户端的请求数据是否在memcached中
- 如有,直接把请求数据返回,不再对数据库进行任何操作
- 如果请求的数据不在memcached中,就去查数据库
- 从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中,需要程序根据需求来实现
- 更新数据库,同时更新memcached中的数据,保证一致性
- 当分配给memcached内存空间用完之后,会使用LRU(最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。
通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,
包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,
然后从内存中读取,从而大大提高读取速度。
Memcached是以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。
Memcache 特点
- 只要计算机内存足够大,在 Memcached中可以保存无限的item数据。
- 可以分多个端口开启多个Memcached进程 ,使用更多的内存。
- 最大30天的数据过期时间。
- 单个item最大数据是1MB。
- 最大同时连接数是200,最大软连接数是1024。
- 一种无阻塞的socket通信方式服务,基于libevent库,读写速度非常快。
- 有服务器端和客户端,可以配置多个服务器端和客户端。
- 在小规模的数据分布式平台是十分有效果的。
- 是键值队(KV),key默认最大不能超过128个字 节,value默认大小是1M
Memcache 常用接口
Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口。
- Memcache::pconnect -- 打开一个到Memcache的长连接
- Memcache::close -- 关闭一个Memcache的连接
- Memcache::set -- 保存数据到Memcache服务器上
- Memcache::get --提取一个保存在Memcache服务器上的数据
Memcache 应用
为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取。关键点:就是集中在如何分担数据库压力和进行分布式。
⑴主要功能:
- 服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新;
- 服务器性能监控:GET、DELETE、INCR、DECR、CAS等常用操作命中率实时监控;
- 支持数据遍历,方便对存储内容进行监视;
- 支持条件查询,筛选出满足条件的KEY或VALUE;
- 数组、JSON等序列化字符反序列显示;
- 兼容memcache协议的其他服务,如Tokyo Tyrant (遍历功能除外);
- 支持服务器连接池,多服务器管理切换方便简洁。
⑵应用
- 数据缓存
- 存储session
- 短信验证码存储
- 缓解数据库压力,提高交互速度
- 数据库主从同步中继
Spring boot 继承Memcache
- 添加依赖-pomx 包中
<code><dependency><groupid>net.spy/<groupid><artifactid>spymemcached/<artifactid><version>2.12.2/<version>/<dependency>/<code>
- 添加配置
<code>memcache.ip=192.168.0.161/<code>
- 设置配置对象-MemcacheSource 接收配置信息
<code>@Component@ConfigurationProperties(prefix = "memcache")public class MemcacheSource { ...... }/<code>
- 使用Memcache
<code>MemcachedClient memcachedClient = memcachedRunner.getClient();memcachedClient.set("testkey",1000,"666666");System.out.println("20200227 "+memcachedClient.get("testkey").toString());}}/<code>
閱讀更多 天天面試題 的文章