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初始值
3,slab尾部剩余空间
解决办法:规划slab=chunk*n整数倍slab中chunk利用率低:申请的slab只存放了一个Item
解决办法:规划slab=chunkchunk存储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 安装使用存储
//www.greatytc.com/p/2b3c43c1778c
java 使用memcached以及spring 配置memcached
//www.greatytc.com/p/6f264bf5d9f9
memcached优化
//www.greatytc.com/p/789d208036f5