MySQL查询结果 - 使用java进行memcached

时间:2011-11-21 07:20:03

标签: java mysql memcached

我是Memcache的新手。我刚用Java测试了Memcache,它运行正常。我想将MySQL查询结果存储在Memcache密钥中。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

如果我有这样做的倾向,我会使用ByteArray [输出/输入]流和对象[输出/输入]流编写快速串行器/解串器,并使用memcache存储生成的字节数组。您可能需要将结果读入数组,然后序列化以执行此操作,但尝试查看哪些有效。

IMO你可能最好使用某种形式的JPA,它会为你处理缓存问题,而不会出现可能过时的缓存问题。如果可以,请查看Hibernate / Eclipselink,因为这可能会为您提供更好的性能(更少的序列化)并避免过时的缓存问题。

JBoss Cache也可以处理pojos,因此如果您的数据由java对象(JPA始终是)表示,您可以将结果存储在JBoss Cache中。 POJO可以很容易地序列化,也可以存储在memcached中。

我上面提到的选项是:

  • 序列化MySQL结果/结果数组并存储在memcached
  • 使用JPA及其内部缓存。 (依赖于实施)
  • 使用像JBoss Cache这样的缓存框架来存储MySQL结果/结果数组或JPA结果
  • 将JPA / POJO结果序列化为memcached

答案 1 :(得分:0)

如果您使用Spymemcached,那么您只需将查询结果放入Serializable对象并将其发送到memcached。例如,

client.set(“keyname”,0,object);

其中对象的类型是保存查询结果的可序列化对象。 Spymemcached将负责执行所有序列化,当您稍后获取对象时,Spymemcached将为您反序列化该对象。

答案 2 :(得分:0)

import net.spy.memcached.MemcachedClient;
public class memfunc implements java.io.Serializable{
    Connection conn;
    private int urlid;
    private String er;
    private static MemcachedClient c = null;
static {
      try {
c = new MemcachedClient(new InetSocketAddress("127.0.0.1",11211));
} catch (IOException e) {
         e.printStackTrace();
         System.exit(-1);
      }
   }
public float[][] avgInfo(){
        String key=host;
        host=hostParser(host);
        String[] info=new String[6];
        if(c.get(key)==null && key==host){
                 ---------your code----
Future<Boolean> set= c.set(key, 3600, info);
             }
    return (String[]) c.get(key);}