memcached优化方法及应用场景

memcached分布式

Memcached尽管是“分布式”的缓存系统,但服务器端并没有分布式功能。各个 Memcached不会互相通信以共享信息。分布式完全取决于客户端实现。
Memcached的分布式客户端
客户端可以通过配置SockIOPool的servers参数保存服务器地址列表,通过
weight参数配置每台服务器的权重。SockIOPool提供了连接池的服务,可以通过 SockIOPool来配置memcahce服务器相关信息,如最大连接数,最小连接数等。

一个key只能存放在一台Memcache服务器上,是不会在多个服务器上有多份拷贝的,这样的话既可以防止出现刷新不同步的情况,也可以避免磁盘空间的浪费

Memcached的分布式特点

1: 服务器端不关心分布式。

2: 依靠客户端来实现分布式 。

3: 客户端存储着可以访问到的Memcached服务器列表 。

4: 在客户端用算法来保证,对同样key值的数据,读写都操作同一个服务器。

Memcached 的调优的目标

  1. 提高内存利用率,减少内存浪费。
  2. 提高命中率。

调优方法:

  1. f参数:
    factor增长因子,默认为1.25,曾经为2,值越小,slab中chunk size差距 越小,内存浪费越小。1.25适合缓存几百字节的对象。
    建议:计算一下数据的预期平均长度,调整factor,以获得最恰当的设置。

  2. n参数:chunk初始值

  • slab尾部剩余空间
    解决办法:规划slab=chunk*n整数倍

  • slab中chunk利用率低:申请的slab只存放了一个Item
    解决办法:规划slab=chunk

  • chunk存储Item浪费
    如Item是100,存到128字节chunk,就有28字节浪费
    解决办法:规划chunk=Item

Memcached 的限制

  • 在Memcached中可以保存的item数据量是没有限制的,只要内存足够。

  • Memcached单进程最大使用内存为2G,要使用更多内存,可以分多个端口开启多
    个Memcached进程。

  • Memcached设置Item为最大30天的过期时间,设置为永久的也会在这个时间过期,
    常量REALTIME_MAXDELTA为606024*30控制。

  • Memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问
    题,当内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删
    除不使用的缓存。

  • 最大键长为250字节,大于该长度无法存储,单个item最大数据是1MB,超过1MB数据不予存储。

Memcached 的使用目的

通过缓存数据库查询结果,减少数据库访问次

数;还有就是缓存热点数据,以提高Web应用的速度、提高可扩展性。

  1. 缓存简单的查询结果:查询缓存存储了给定查询语句对应的整个结果集,最合适
    缓存那些经常被用到,但不会改变的SQL语句对应查询到的结果集,比如载入特
    定的过滤内容。
  2. 缓存简单的基于行的查询结果。

  3. 缓存的不只是SQL数据,可以缓存常用的热点数据,比如页面,以节省CPU时间使用分层的缓存。

  4. 特别注意:当数据更新时需要更新缓存。

Memcached 的典型使用场景

  1. 分布式应用。

  2. 数据库前段缓存。

  3. 服务器间数据共享。

  4. 变化频繁,查询频繁的数据,但是不一定写入数据库,比如:用户在线状态 。

  5. 变化不频繁,查询频繁,不管是否入库,都比较适合使用。

Memcached 不适合使用Memcached的场景

1: 变化频繁, 一变化就要入库类的应用,比如股票,金融。

2: 那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,
memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源。

3: 缓存对象的大小大于1MB。

4: key的长度大于250字符。

相关文章

Memcached 安装使用存储
http://www.jianshu.com/p/2b3c43c1778c

java 使用memcached以及spring 配置memcached
http://www.jianshu.com/p/6f264bf5d9f9

memcached优化
http://www.jianshu.com/p/789d208036f5

标签:Memcache 发布于:2019-11-17 23:37:43