Memcached尽管是“分布式”的缓存系统,但服务器端并没有分布式功能。各个 Memcached不会互相通信以共享信息。分布式完全取决于客户端实现。
Memcached的分布式客户端
客户端可以通过配置SockIOPool的servers参数保存服务器地址列表,通过
weight参数配置每台服务器的权重。SockIOPool提供了连接池的服务,可以通过 SockIOPool来配置memcahce服务器相关信息,如最大连接数,最小连接数等。
一个key只能存放在一台Memcache服务器上,是不会在多个服务器上有多份拷贝的,这样的话既可以防止出现刷新不同步的情况,也可以避免磁盘空间的浪费
1: 服务器端不关心分布式。
2: 依靠客户端来实现分布式 。
3: 客户端存储着可以访问到的Memcached服务器列表 。
4: 在客户端用算法来保证,对同样key值的数据,读写都操作同一个服务器。
提高命中率。
f参数:
factor增长因子,默认为1.25,曾经为2,值越小,slab中chunk size差距 越小,内存浪费越小。1.25适合缓存几百字节的对象。
建议:计算一下数据的预期平均长度,调整factor,以获得最恰当的设置。
n参数:chunk初始值
slab尾部剩余空间
解决办法:规划slab=chunk*n整数倍
slab中chunk利用率低:申请的slab只存放了一个Item
解决办法:规划slab=chunk
chunk存储Item浪费
如Item是100,存到128字节chunk,就有28字节浪费
解决办法:规划chunk=Item
在Memcached中可以保存的item数据量是没有限制的,只要内存足够。
Memcached单进程最大使用内存为2G,要使用更多内存,可以分多个端口开启多
个Memcached进程。
Memcached设置Item为最大30天的过期时间,设置为永久的也会在这个时间过期,
常量REALTIME_MAXDELTA为606024*30控制。
Memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问
题,当内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删
除不使用的缓存。
最大键长为250字节,大于该长度无法存储,单个item最大数据是1MB,超过1MB数据不予存储。
通过缓存数据库查询结果,减少数据库访问次
数;还有就是缓存热点数据,以提高Web应用的速度、提高可扩展性。
缓存简单的基于行的查询结果。
缓存的不只是SQL数据,可以缓存常用的热点数据,比如页面,以节省CPU时间使用分层的缓存。
特别注意:当数据更新时需要更新缓存。
分布式应用。
数据库前段缓存。
服务器间数据共享。
变化频繁,查询频繁的数据,但是不一定写入数据库,比如:用户在线状态 。
变化不频繁,查询频繁,不管是否入库,都比较适合使用。
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