发表于: 2021-03-10 23:54:42

1 1256


今天完成的事情:

配置memcached




明天计划的事情:

解决memcached报错问题





遇到的问题:

导入这个包,导入失败,尝试了很多次,还是失败。后来想了一下,我为什么要导入这包?因为要使用这个包中的程序,但是我依旧到导入了另外一个包Memcached-Java-Client 3.0.2  



我可以使用这个包的资源,而且这个包相对于这个包java-memcached更新。
<!-- memcached -->
<dependency>
<groupId>com.danga</groupId>
<artifactId>java-memcached</artifactId>
<version>2.6.6</version>
</dependency>

然后我又搜索了一下


Memcached的几种Java客户端(待实践)


其实现在来尝试Memcached的客户端估计会有点过气,因为现在大势基本都在Redis那边。


Memcached Client目前有3种:


Memcached Client for Java(已经停止更新)


SpyMemcached(已经停止更新)


XMemcached(一直更新,且支持客户端分片实现集群,基本现在是它的天下)

原来 XMemcached才是最新的...


然后经过我一段乱改,还是成功导入了java-memcached,下面两个都是自己魔改的,暂时就这个先用着吧



参考资料还是不行,重新换了一个

================
================







收获:


引入依赖包:


<!--memcached-->
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>com.whalin</groupId>
<artifactId>Memcached-Java-Client</artifactId>
<version>3.0.2</version>
</dependency>



添加memcached.properties配置


#######################Memcached配置#######################
#服务器地址
#memcached.server1=127.0.0.1
#memcached.port1=11211
memcached.server = 127.0.0.1:11211
#初始化时对每个服务器建立的连接数目
memcached.initConn=20
#每个服务器建立最小的连接数
memcached.minConn=10
#每个服务器建立最大的连接数
memcached.maxConn=50
#自查线程周期进行工作,其每次休眠时间
memcached.maintSleep=3000
#Socket的参数,如果是true在写数据时不缓冲,立即发送出去
memcached.nagle=false
#Socket阻塞读取数据的超时时间
memcached.socketTO=3000
#true会检查Socket是否已经连接
memcached.aliveCheck= true
# 容错开关 设置为TRUE,当当前socket不可用时,程序会自动查找可用连接并返回,否则返回NULL,默认状态是true,建议保持默认。
#memcached.failover=true;




修改memcached.xml配置


<?xml version="1.0" encoding="UTF-8"?>
<context:property-placeholder location="classpath:memcached.properties" ignore-unresolvable="true"/>
<bean id="memcachedPool" class="com.whalin.MemCached.SockIOPool" factory-method="getInstance"
init-method="initialize" destroy-method="shutDown">
<constructor-arg>
<value>memcachedPool</value>
</constructor-arg>
<property name="servers">
<!--可以配置多个 server-->
<list>
<value>${memcached.server}</value>
</list>
</property>
<property name="initConn" value="${memcached.initConn}"/>
<property name="minConn" value="${memcached.minConn}"/>
<property name="maxConn" value="${memcached.maxConn}"/>
<property name="maintSleep" value="${memcached.maintSleep}"/>
<property name="nagle" value="${memcached.nagle}"/>
<property name="socketTO" value="${memcached.socketTO}"/>
<property name="aliveCheck" value="${memcached.aliveCheck}"/>
</bean>
<bean id="memcachedClient" class="com.whalin.MemCached.MemCachedClient">
<constructor-arg>
<value>memcachedPool</value>
</constructor-arg>
</bean>
</beans>




添加测试类


@Resource(name = "memcachedClient")
MemCachedClient memCachedClient;
@Test
public void test1(){
//插入方法有三种
//1.set方法,如果key值已存在则直接覆盖重写。
memCachedClient.set("name",11);
memCachedClient.set("name",22);
System.out.println("测试结果:"+memCachedClient.get("name"));
}


运行:报错空指针错误




添加MemcachedController类

@Controller
public class MemcachedController {
@Autowired
private MemCachedClient memCachedClient;
@RequestMapping("/memcached")
public void setMemcachedServer(){
Boolean target=memCachedClient.set("1""123456");
System.out.println("memcached 加载是否成功:"+target);
String result =(String)memCachedClient.get("1");
System.out.println("memcached 获取的结果:"+result);
memCachedClient.delete("1");
}
}



运行:报错,无法解析占位符'memcached.server服务器“价值”${memcached.server服务器}"




一开始以为memcached没有启动,所以连接不成功。用telent测试了一下,可以连接成功




================
================

猜测导致报错的原因是,无法连接上memcached,导致添加值,输出的值的时候  报空指针错误







返回列表 返回列表
评论

    分享到