02.27 Memcache 基础知识大补

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客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口。

  • Memcache::connect -- 打开一个到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>


    分享到:


    相關文章: