论坛首页 Java企业应用论坛

spring 管理 memcached (方便扩展)

浏览 6543 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-11-29   最后修改:2009-12-10

 

最近项目中要用到缓存,无意中了解到memcached使用比较广泛,但考虑到以后其它情况(有可能换其它缓存),想了想

 

应该用一个更灵活的方法来管理缓存,经过资料查找和自己耐心调试,最终还是出来了(暂未过多考虑性能)

 

  

有个疑惑:这个客户端的连接池,设置连接的空闲时间短点好(n秒)还是设置时间长点好呢?(n小时)

时间长了,如果并发很大是不是连接很快就满了?

 

 

 

后来我修改了,一个客户端一个配置文件,这样用哪个客户端就只加载对应的配置文件

详请见附件(spring_memcached.zip )。 接口里的方法定义不是太合理,只是提供给有需要的朋友一个思路。

 

暂写了两个客户端的配置一个是官方客户端,一个是xmencached (也是网上找来或者看官方实现)。

 

 

spring配置(代码详见附件(一个接口,两个实现,两个配置文件),具体客户端支持包请自行下载):

<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd ">
<!--memcached 客户端***start-->
<bean id="memcachedPool" class="com.danga.MemCached.SockIOPool" factory-method="getInstance" init-method="initialize" destroy-method="shutDown">
    <constructor-arg>
        <value>neeaMemcachedPool</value>
    </constructor-arg>
    <property name="servers">
        <list>
            <value>192.168.54.207:12345</value>
            <!--多服务器
             <value>
                192.168.54.207:12346
            </value>
            -->
        </list>
    </property>
	<!--多服务器负载均衡-->
	<!--<property name="weights">
		<value>5,5</value>
	</property>-->
    <property name="initConn">
        <value>20</value>
    </property>
    <property name="minConn">
        <value>10</value>
    </property>
    <property name="maxConn">
        <value>500</value>
    </property>
    <property name="maintSleep">
        <value>30</value>
    </property>
    <property name="nagle">
        <value>false</value>
    </property>
    <property name="maxIdle">
        <value>6000</value>
    </property>
    <property name="socketTO">
        <value>3000</value>
    </property>
</bean>

<!--memcached client-->
<bean id="memcachedClient" class="com.danga.MemCached.MemCachedClient">
    <constructor-arg>
        <value>neeaMemcachedPool</value>
    </constructor-arg>
    <property name="compressEnable">
        <value>true</value>
    </property>
    <property name="compressThreshold">
        <value>4096</value>
    </property>
</bean>
<!--memcached 客户端***end-->

<!--如果换客户端或者换缓存了,在web.mxl里切换加载对应的配置文件即可-->
<bean id="cache" class="com.kanmenzhu.impl.CacheClientImpl">
	<property name="cacheProvider" ref="memcachedClient"/>
</bean>

</beans>

 

   发表时间:2009-11-29   最后修改:2009-12-10

附件文件名spring居然附件写成了sprint....不改了

定义了一个调用缓存客户端的接口,这样使用缓存进行操作就变成调用这个接口的实现了。以后要改缓存服务器或客户端了就只要添加实现并修改spring配置。
不知这样设计是否合理……

 

0 请登录后投票
   发表时间:2009-11-29  
还是放弃com.danga.MemCached,在高并发的情况下,完全不可用。换xmemcached或者spymemcached吧
0 请登录后投票
   发表时间:2009-11-30   最后修改:2009-11-30
yishh 写道
还是放弃com.danga.MemCached,在高并发的情况下,完全不可用。换xmemcached或者spymemcached吧


已经换成xmemcached了,看来之前设计还是有点小道理的。换这个客户端倒是比较轻松了

同时将缓存相关配置成单独配置文件,这样用哪个就在web.xml里配置加载哪个
0 请登录后投票
   发表时间:2009-12-01  
yishh 写道
还是放弃com.danga.MemCached,在高并发的情况下,完全不可用。换xmemcached或者spymemcached吧

原来是这样 谢谢了 我去查查 ~~
0 请登录后投票
   发表时间:2009-12-01   最后修改:2009-12-01
whaosoft 写道
yishh 写道
还是放弃com.danga.MemCached,在高并发的情况下,完全不可用。换xmemcached或者spymemcached吧

原来是这样 谢谢了 我去查查 ~~


我用一台普通PC CentOS,1.28服务器,官方客户端单线程1秒只能写1000个左右,读稍慢一点点。
0 请登录后投票
   发表时间:2009-12-01  
yishh 写道
还是放弃com.danga.MemCached,在高并发的情况下,完全不可用。换xmemcached或者spymemcached吧

http://code.google.com/p/xmemcached/wiki/Spring_Integration

xmemcached已经提供了spring集成方案~
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics