首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

Memcached-memcached兑现内存缓存

2013-08-09 
Memcached-----memcached实现内存缓存2.2?memcached 安装首先是下载 memcached 了,目前最新版本是 1.1.12,

Memcached-----memcached实现内存缓存

2.2?memcached 安装

首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到?memcached-1.1.12.tar.gz。除此之外,memcached 用到了?libevent,我下载的是 libevent-1.1a.tar.gz

接下来是分别将 libevent-1.1a.tar.gz 和 memcached-1.1.12.tar.gz 解开包、编译、安装:

-d 以守护程序(daemon)方式运行 memcached;
Memcached-memcached兑现内存缓存-m 设置 memcached 可以使用的内存大小,单位为 M;
Memcached-memcached兑现内存缓存-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;
Memcached-memcached兑现内存缓存-p 设置监听的端口,默认为 11211,所以也可以不设置此参数;
Memcached-memcached兑现内存缓存-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户。

?

这将会启动一个占用2G内存的进程,并打开11211端口用于接收请求。由于32位系统只能处理4G内存的寻址,所以在大于4G内存使用PAE的32位服务器上可以运行2-3个进程,并在不同端口进行监听。

4. 如何使用memcached-Client端?

在应用端包含一个用于描述Client的Class后,就可以直接使用,非常简单。

PHP Example:

$options["servers"] = array("192.168.1.41:11211", "192.168.1.42:11212");

$options["debug"] = false;

$memc = new MemCachedClient($options);

$myarr = array("one","two", 3);

$memc->set("key_one", $myarr);

$val = $memc->get("key_one");

print $val[0]."/n"; // prints \'one‘

print $val[1]."/n"; // prints \'two‘

print $val[2]."/n"; // prints 3

5.为什么不使用数据库做这些?

暂且不考虑使用什么样的数据库(MS-SQL, Oracle, Postgres, MysQL-InnoDB, etc..), 实现事务(ACID,Atomicity, Consistency, Isolation, and Durability )需要大量开销,特别当使用到硬盘的时候,这就意味着查询可能会阻塞。当使用不包含事务的数据库(例如Mysql-MyISAM),上面的开销不存在,但读线程又可能会被写线程阻塞。Memcached从不阻塞,速度非常快。

6.为什么不使用共享内存?

最初的缓存做法是在线程内对对象进行缓存,但这样进程间就无法共享缓存,命中率非常低,导致缓存效率极低。后来出现了共享内存的缓存,多个进程或者线程共享同一块缓存,但毕竟还是只能局限在一台机器上,多台机器做相同的缓存同样是一种资源的浪费,而且命中率也比较低。

Memcached Server和Clients共同工作,实现跨服务器分布式的全局的缓存。并且可以与Web Server共同工作,Web Server对CPU要求高,对内存要求低,Memcached Server对CPU要求低,对内存要求高,所以可以搭配使用。

7.Mysql 4.x的缓存怎么样?

Mysql查询缓存不是很理想,因为以下几点:

当指定的表发生更新后,查询缓存会被清空。在一个大负载的系统上这样的事情发生的非常频繁,导致查询缓存效率非常低,有的情况下甚至还不如不开,因为它对cache的管理还是会有开销。

在32位机器上,Mysql对内存的操作还是被限制在4G以内,但memcached可以分布开,内存规模理论上不受限制。

Mysql上的是查询缓存,而不是对象缓存,如果在查询后还需要大量其它操作,查询缓存就帮不上忙了。

如果要缓存的数据不大,并且查询的不是非常频繁,这样的情况下可以用Mysql 查询缓存,不然的话memcached更好。

8.数据库同步怎么样?

这里的数据库同步是指的类似Mysql Master-Slave模式的靠日志同步实现数据库同步的机制。

你可以分布读操作,但无法分布写操作,但写操作的同步需要消耗大量的资源,而且这个开销是随着slave服务器的增长而不断增长的。

下一步是要对数据库进行水平切分,从而让不同的数据分布到不同的数据库服务器组上,从而实现分布的读写,这需要在应用中实现根据不同的数据连接不同的数据库。

当这一模式工作后(我们也推荐这样做),更多的数据库导致更多的让人头疼的硬件错误。

Memcached可以有效的降低对数据库的访问,让数据库用主要的精力来做不频繁的写操作,而这是数据库自己控制的,很少会自己阻塞 自己。

9.Memcached快吗?

非常快,它使用libevent,可以应付任意数量打开的连接(使用epoll,而非poll),使用非阻塞网络IO,分布式散列对象到不同的服务器,查询复杂度是O(1)。

10.memcached的相关抽象类

?

Memcached-memcached兑现内存缓存public abstract class BaseManager?implements Manager?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?private MemcachedClient memcached;
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?protected int default_cache_time_second = 3600;?
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?public void setMemcached(MemcachedClient memcached)?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?this.memcached = memcached;
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?public MemcachedClient getMemcached()?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?return memcached;
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?public void setDefault_cache_time_second(int default_cache_time_second)?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?this.default_cache_time_second = default_cache_time_second;
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?public Object getCacheValueFromMemcached(String key)?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?return getCacheValueFromMemcached(key, null);
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?public Object getCacheValueFromMemcached(String key, Object obj)?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?Object new_obj = null;
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?try?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?new_obj = memcached.get(key);
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}?catch (Exception e)?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?if (logger.isWarnEnabled())?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?logger.warn("Failed to get from MeMCache", e);
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?return (new_obj != null) ? new_obj : obj;
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?public void setCacheValueToMemcached(String cacheKey, int time_to_live, Serializable obj)?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?if (null != memcached.get(cacheKey))?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?memcached.replace(cacheKey, time_to_live, obj);
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}?else?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?memcached.add(cacheKey, time_to_live, obj);
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存?}

?

11.service调用memcache的一个例子:

Memcached-memcached兑现内存缓存?public List?getLastModifyAlbumMember(int limit)?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?String cacheKey = this.createCachekey(new
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?Object[]...{"schedule","lastmodifyalbumember",limit});
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?List list = (List) this.getCacheValueFromMemcached(cacheKey);
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?List?list1 = new ArrayList();
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?if(null!=list&&list.size()>0)...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?for (Object aList : list)?...{
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?list1.add(Integer.parseInt(String.valueOf(aList)));
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?return list1;
Memcached-memcached兑现内存缓存
Memcached-memcached兑现内存缓存?}

热点排行