高手进,memcache 问题,很诡异.......

song19830708 2015-04-10 09:27:33
异常:
2015-04-10 21:16:34,285 ERROR [com.alisoft.xplatform.asf.cache.memcached.MemcachedCache] - mclient0 cluster get error
com.alisoft.xplatform.asf.cache.memcached.MemcachedException: sock is null
at com.alisoft.xplatform.asf.cache.memcached.client.MemCachedClient.get(MemCachedClient.java:1357)
at com.alisoft.xplatform.asf.cache.memcached.client.MemCachedClient.get(MemCachedClient.java:1296)
at com.alisoft.xplatform.asf.cache.memcached.MemcachedCache.get(MemcachedCache.java:272)
at com.alisoft.xplatform.asf.cache.memcached.MemcachedCache.get(MemcachedCache.java:23)
at com.casino.poker.util.MemcacheUtil.get(MemcacheUtil.java:42)
at com.casino.poker.service.impl.PlayerService.qryPlayerInfo(PlayerService.java:59)
at com.casino.poker.service.impl.PlayerService.qryPlayerInfo(PlayerService.java:50)
at sun.reflect.GeneratedMethodAccessor106.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)



代码
public PlayerInfo qryPlayerInfo(int playerID,boolean isDb) {
if (isDb) {
PlayerInfo plInfo = playerMapper.qryPlayerInfo(playerID);
return plInfo;
} else {
Object obj = MemcacheUtil.get(PLAYER_KEY + playerID); // 此行获取memcache缓存为空,但是使用快捷键 Ctrl + shift +i 快捷键查看,能获取memcache缓存中的值,好诡异
if (obj != null && obj instanceof PlayerInfo) {
return (PlayerInfo) obj;
} else {
PlayerInfo plInfo = playerMapper.qryPlayerInfo(playerID);
if (plInfo != null) {
MemcacheUtil.add(PLAYER_KEY + playerID, plInfo);
}
return plInfo;
}
}
}
...全文
1478 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
glamey 2015-09-06
  • 打赏
  • 举报
回复
从日志上边看,获取链接失败。需要看下memcached客户端的实例是如何建立起来的。推荐使用连接池方式。
playt 2015-08-27
  • 打赏
  • 举报
回复
我项目中遇到和你一样的问题,目前解决了。我的问题原因是,项目中有两个类都是使用同一份配置,操纵memcached,区别在于,一个使用了单例模式,一个采用静态类的方式,去实例化memcachedclient,获取连接。代码中两个方式存在交替使用,估计这样的方式存在问题,有点连接池或是什么对象争抢的意思,导致在交差使用时其中一个拿不到可用的连接,造成这个异常。只要保证项目里只使用一种 方式去操作memcached就好了。如果一定要使用两种方式,应该使用两份不同的配置,配置中的name要区分开。 ================================= 以上不知道说的对不对,希望对楼主有用。
playt 2015-08-26
  • 打赏
  • 举报
回复
楼主,你的这个问题解决了吗?我也遇见同样的问题了。
w5325698 2015-06-18
  • 打赏
  • 举报
回复
你看看是不是还少了jar包或者引用类名时候写错了。
liqiuguo 2015-05-23
  • 打赏
  • 举报
回复
我遇到的是Not find class name:com.alisoft.xplatform.asf.cache.memcached.MemcachedError,不知道这个是什么原因,大神求救
song19830708 2015-04-11
  • 打赏
  • 举报
回复
怎么没人啊,自己顶下
song19830708 2015-04-10
  • 打赏
  • 举报
回复
MemcacheUtil .java 类容: public class MemcacheUtil { private static IMemcachedCache memCachedClient; static { if (memCachedClient == null) { ICacheManager<IMemcachedCache> manager; manager = CacheUtil.getCacheManager(IMemcachedCache.class, MemcachedCacheManager.class.getName()); manager.setConfigFile("memcached.xml"); manager.start(); memCachedClient = manager.getCache("mclient0"); } } public static Object put(String key, Object obj) { return memCachedClient.put(key, obj); } public static Object get(String key) { return memCachedClient.get(key); } public static Object put(String key, Object obj, int time) { return memCachedClient.put(key, obj, new Date(System.currentTimeMillis() + time * 1000)); } public static Object remove(String key) { return memCachedClient.remove(key); } public static boolean containsKey(String key) { return memCachedClient.containsKey(key); } public static Object get(String key, int localCacheTime) { return memCachedClient.get(key, localCacheTime); } public static Object put(String key, Object obj, Date date) { return memCachedClient.put(key, obj, date); } public static boolean add(String key, Object obj) { return memCachedClient.add(key, obj); } public static boolean add(String key, Object obj, Date date) { return memCachedClient.add(key, obj, date); } public static boolean add(String key, Object obj, int time) { return memCachedClient.add(key, obj, new Date(System.currentTimeMillis() + time * 1000)); } public static boolean replace(String key, Object object) { return memCachedClient.replace(key, object); } public static boolean replace(String key, Object object, Date date) { return memCachedClient.replace(key, object, date); } public static boolean replace(String key, Object object, int time) { return memCachedClient.replace(key, object, new Date(System.currentTimeMillis() + time * 1000)); } public static void incr(String key){ memCachedClient.incr(key, 1); } }
song19830708 2015-04-10
  • 打赏
  • 举报
回复
memcache.xml 玩家类容 <?xml version="1.0" encoding="UTF-8"?> <memcached> <client name="mclient0" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool0"> <!-- <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler </errorHandler> --> </client> <socketpool name="pool0" failover="true" initConn="50" minConn="50" maxConn="250" maintSleep="5000" nagle="false" socketTO="3000" aliveCheck="true"> <servers>192.168.0.57:11211</servers> </socketpool> </memcached>

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧