标签: spymemcached

Amazon ElasticCache自动发现 - 客户端未初始化

我正在尝试使用AutoDiscovery测试亚马逊的新Memcached客户端.我有一个memcached节点,我可以使用XMemcached 1.3.5以及标准的SpyMemcached库连接到该节点.

我按照这里的说明操作:http://docs.amazonwebservices.com/AmazonElastiCache/latest/UserGuide/AutoDiscovery.html

代码几乎与示例相同,并且是:

String configEndpoint = "<server name>.rgcl8z.cfg.use1.cache.amazonaws.com";
Integer clusterPort = 11211;
MemcachedClient client = new MemcachedClient(new InetSocketAddress(configEndpoint, clusterPort));
client.set("theKey", 3600, "This is the data value");
Run Code Online (Sandbox Code Playgroud)

我在创建连接时在日志中看到以下内容.我尝试设置值时发生错误:

2013-01-04 22:05:30.445 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=/<ip>:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2013-01-04 22:05:32.861 INFO net.spy.memcached.ConfigurationPoller:  Starting configuration poller.
2013-01-04 22:05:32.861 INFO net.spy.memcached.ConfigurationPoller:  Endpoint to use for configuration access in this poll NodeEndPoint - HostName:<our-server>.rgcl8z.cfg.use1.cache.amazonaws.com IpAddress:<ip> Port:11211
2013-01-04 22:05:32.950 WARN net.spy.memcached.MemcachedClient:  Configuration endpoint timed …
Run Code Online (Sandbox Code Playgroud)

java amazon-web-services spymemcached amazon-elasticache

6
推荐指数
1
解决办法
4968
查看次数

如何在netty中异步访问memcached

我在netty中编写服务器,我需要调用memcached.我正在使用spymemcached,可以轻松地进行同步memcached调用.我希望这个memcached调用是异步的.那可能吗?netty提供的示例似乎没有帮助.

我尝试使用回调:ExecutorService在我的处理程序中创建了一个池,并向该池提交了一个回调工作程序.像这样:

公共类MyHandler扩展ChannelInboundMessageHandlerAdapter <MyPOJO>实现CallbackInterface {

   ...
   private static ExecutorService pool = Executors.newFixedThreadPool(20);


   @Override
   public void messageReceived(ChannelHandlerContext ctx, MyPOJO pojo) {
       ...
       CallingbackWorker worker = new CallingbackWorker(key, this);
       pool.submit(worker);
       ...
   }
   public void myCallback() {
       //get response
       this.ctx.nextOutboundMessageBuf().add(response);
   }
Run Code Online (Sandbox Code Playgroud)

}

CallingbackWorker 好像:

public class CallingbackWorker实现Callable {

  public CallingbackWorker(String key, CallbackInterface c) {
       this.c = c;
       this.key = key;
  }
  public Object call() {
    //get value from key
    c.myCallback(value);
  }
Run Code Online (Sandbox Code Playgroud)

然而,当我这样做,this.ctx.nextOutboundMessageBuf()myCallback卡住.

总的来说,我的问题是:如何在Netty中进行异步memcached调用?

memcached spymemcached netty

6
推荐指数
1
解决办法
1487
查看次数

如何阻止 tomcat 尝试连接到本地 memcached 服务器失败?

我已经在 tomcat 容器中部署了我的 web 应用程序,但由于可能存在连接泄漏,web 应用程序不断尝试连接到侦听端口 11211 和 11212 的本地 memcached 服务器失败。我正在使用 spy-memcached 客户端。

我定义了一个 ContextListener ,它基本上关闭了所有活动的 memcached 客户端连接。

但是,当我取消部署我的 web 应用程序时,在我看来 tomcat 仍在尝试继续尝试连接到 memcached 服务器的失败尝试,它不应该。我已经使用 netstat 检查了 memcached 服务器上的活动 tcp 连接,但我找不到任何条目。

我也重新启动了 tomcat 服务器,但无济于事。

我应该如何限制 tomcat 进行这些连接?

2011-11-13 21:21:34.575 INFO net.spy.memcached.MemcachedConnection:  Reconnecting due to failure to connect to {QA sa=localhost/127.0.0.1:11212, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0}
java.net.ConnectException: Connection refused
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
    at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:407)
    at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:275)
    at net.spy.memcached.MemcachedClient.run(MemcachedClient.java:2030)
2011-11-13 21:21:34.576 WARN net.spy.memcached.MemcachedConnection:  Closing, and reopening {QA …
Run Code Online (Sandbox Code Playgroud)

java memcached tomcat spymemcached

5
推荐指数
1
解决办法
4297
查看次数

Couchbase:net.spy.memcached.internal.CheckedOperationTimeoutException

我正在使用特定于应用程序的 json 对象加载本地 Couchbase 实例。

相关代码是:

CouchbaseClient getCouchbaseClient()
{
    List<URI> uris = new LinkedList<URI>();
    uris.add(URI.create("http://localhost:8091/pools"));
    CouchbaseConnectionFactoryBuilder cfb = new CouchbaseConnectionFactoryBuilder();
    cfb.setFailureMode(FailureMode.Retry);
    cfb.setMaxReconnectDelay(1500); // to enqueue an operation
    cfb.setOpTimeout(10000); // wait up to 10 seconds for an operation to succeed
    cfb.setOpQueueMaxBlockTime(5000); // wait up to 5 seconds when trying to
                                      // enqueue an operation
    return new CouchbaseClient(cfb.buildCouchbaseConnection(uris, "my-app-bucket", ""));
}
Run Code Online (Sandbox Code Playgroud)

存储条目的方法(我正在使用来自Bulk Load 和 Exponential Backoff 的建议):

  void continuosSet(CouchbaseClient cache, String key, int exp, Object value, int tries)
  {
    OperationFuture<Boolean> …
Run Code Online (Sandbox Code Playgroud)

java caching nosql spymemcached couchbase

5
推荐指数
1
解决办法
5851
查看次数

spymemcache - MemcachedClient 有内置连接池吗?

我正在使用memcached,并使用 Javaspymemcache连接到它。

我的问题是:

是否MemcachedClient有内置的连接池?

我可以重用类的实例在 memcached 上进行并发操作,还是每次需要时都需要创建一个新实例?

java memcached spymemcached

5
推荐指数
1
解决办法
1756
查看次数

如何确定我的会话尝试序列化的对象?

我最近升级到Spring Security 4.2.3.RELEASE.我也在使用spymemcached v 2.8.4.我遇到了这种情况,由于某些原因,Spring正在尝试序列化服务实现类.我无法弄清楚这是从哪里来的.异常引用的代码行是

Set<Session> userSessions = (Set<Session>) memcachedClient.get(userId);
...
memcachedClient.set(userId, sessionTimeoutInSeconds.intValue(), userSessions); // dies here
Run Code Online (Sandbox Code Playgroud)

带着神秘的错误("java.io.NotSerializableException:org.mainco.subco.ecom.service.ContractServiceImpl"被埋在里面)......

09:06:47,771 ERROR [io.undertow.request] (default task-58) UT005023: Exception handling request to /myproject/registration/save: java.lang.IllegalArgumentException: Non-serializable object
    at net.spy.memcached.transcoders.BaseSerializingTranscoder.serialize(BaseSerializingTranscoder.java:110)
    at net.spy.memcached.transcoders.SerializingTranscoder.encode(SerializingTranscoder.java:162)
    at net.spy.memcached.MemcachedClient.asyncStore(MemcachedClient.java:282)
    at net.spy.memcached.MemcachedClient.set(MemcachedClient.java:733)
    at net.spy.memcached.MemcachedClient.set(MemcachedClient.java:126)
    at org.mainco.subco.session.service.MemcachedSessionService.associateUser(MemcachedSessionService.java:365)
    at org.mainco.subco.session.service.MemcachedSessionService.setSessionSecurityContext(MemcachedSessionService.java:288)
    at org.mainco.subco.core.security.SubcoSecurityContextRepository.saveContext(subcoSecurityContextRepository.java:116)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:114)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
    at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) …
Run Code Online (Sandbox Code Playgroud)

serialization spring spring-security spymemcached spring-4

5
推荐指数
1
解决办法
582
查看次数

在 Memcached 中存储大对象

我在 Memcached 中存储了一个大小为 7-10MB 的对象,在放置该对象后,尝试检索它。在这种情况下我会遇到缓存未命中的情况。知道为什么吗?该解决方案适用于较小的物体尺寸。

背景信息:

我使用 Memcached 存储一组大约 7-10 MB 大小的大型对象。由于某种原因,我不可能将该对象拆分为多个较小的键。我希望缓存是冗余且温暖的,因此,我使用稍微复杂的缓存放置过程,如下所述:

keySet = makeRedundantKeys(key) // Appends a unique num to the key
putAsync(keys in keyset)
while(!timeout || countNonNullKeys > desiredQuorumOfKeys) {
    countNonNullKeys = getSyncKeys(key in keySet)
    sleep(backoffTime);
}
Run Code Online (Sandbox Code Playgroud)

我遇到很多失败,其中 getSyncKeys 需要大约 700 毫秒才能获取一个密钥。知道为什么会发生这种情况吗?仅对于大物体才能观察到这种情况。<1MB 的较小对象可以正常工作并在 ~2ms pAvg 内返回数据。这些是良好的 m4.2xlarge EC2 主机,具有高网络性能。另外,我的 TCP 重传段图飙升至 1500/分钟,这看起来很可疑。

memcached caching spymemcached

5
推荐指数
1
解决办法
4147
查看次数

操作完成后Spymemcached挂起

我正在使用Spymemcached访问服务器上的Memcached.我使用以下命令启动了memcached

memcached -m 4096 -p 11211 -u memcache -l 127.0.0.1 -d -vvv
Run Code Online (Sandbox Code Playgroud)

我正在使用以下驱动程序将一些键/值对放入Memcache.出于某种原因,在最后一次get操作之后,该main功能才会挂起; 它永远不会终止.

import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;

public class memcache {
        public static void main(String args[]) {
                //Connect to Memcache.
                MemcachedClient c=null;
                try{   
                        c = new MemcachedClient(
                                new InetSocketAddress("127.0.0.1", 11211));
                } catch (Exception e) {
                        System.err.println("Could not connect to Memcached.");
                        System.exit(-1);
                }
                System.out.println("Connected to Memcached.");
                Object myObject = null;
                for (int i = 0; i < 10; i++)
                {
                        c.set(new String("HELLO"), 3600, i+1);
                        myObject=c.get("HELLO");
                        String …
Run Code Online (Sandbox Code Playgroud)

java memcached hang spymemcached

4
推荐指数
1
解决办法
2091
查看次数

如何使用spymemcached动态添加memcached节点

我有一个Java应用程序设置,它有多个memcached服务器节点与spymemcached客户端通信.

我想知道是否可以在运行时添加或删除服务器节点,而不会干扰所有现有的缓存节点(我知道应该更改一些节点).

这是我所知道的(或理解):

可以设置自定义哈希算法DefaultConnectionFactory,这有助于我们使用Consistent Hashing甚至使用内置的KetamaConnectionFactory.

因此,我们应该能够添加或删除仅包含一个或几个现有节点的节点.

有可能用spymemcached吗?

如果是,那怎么样?

任何人都可以指出我正确的方向?

java memcached spymemcached

4
推荐指数
1
解决办法
1814
查看次数

我应该使用什么样的bean来访问EJB中的对象池?

在高层次上,我有一个MemcachedPoolService类,它有两个方法:getClientInstance()和returnClientInstance(client).正如所料,getClientInstance()向调用者返回MemcachedClient(spymemcachced)的实例,而returnClientInstance(client)将MemcachedClient返回给池.MemcachedPoolService需要可供其他所有需要访问Memcached的@Stateless服务(注入)使用.

目前我将MemcachedPoolService标记为@Singleton,但是当多个客户端尝试访问该应用程序时,我收到以下错误:

[0m[31m16:54:22,968 ERROR [org.jboss.as.ejb3.invocation] (http-/0.0.0.0:8080-10) 
 JBAS014134: EJB Invocation failed on component MemcachedPoolService for method public
 net.spy.memcached.MemcachedClient com.apexlab.cache.MemcachedPoolService.getClientInstance():
 javax.ejb.EJBTransactionRolledbackException: JBAS014373: EJB 3.1 PFD2 4.8.5.5.1 concurrent
 access timeout on org.jboss.invocation.InterceptorContext$Invocation@24bf375e - could not 
 obtain lock within 5000MILLISECONDS
Run Code Online (Sandbox Code Playgroud)

为生产环境设置我的MemcachedPoolService(以及我的Web应用程序)以避免获取并发超时异常的最佳方法是什么?

java jboss memcached ejb spymemcached

4
推荐指数
1
解决办法
3777
查看次数