Memcache实现设计

时间:2012-11-30 10:03:01

标签: java caching memcached

我试图在我的网络应用程序中实现memcache,并且只是希望得到一些建议,即我在做什么在设计方面是正确的。

我有一个类SimpleDataAccessor,它运行我的所有插入,更新和选择sql查询。因此,必须执行的任何查询都在此类的方法内执行。

所以在我有select查询实现的方法中,我有一个方法将结果集存储在这样的memcache中。

storeinMC(resultset.getJSON(),sqlquery的);

这里的sqlquery是我的密钥。

在运行selectquery之前,我在memcache中检查我是否已经为该查询设置了结果集。

if((String res = getRSFromMC(sqlquery)== null)

所以我试图保持简单明了。 你觉得这有什么问题。?

2 个答案:

答案 0 :(得分:1)

正如rai.skumar正确地指出你的SQL语句可以用不同的方式构造(例如WHERE子句可以在diff顺序中包含相同的条件等)。

因此,要克服上述问题,您需要解析SQL并从中获取所有相关部分。然后,您可以将这些部分组合到缓存键中。

你可以看一下SQL解析器:ZQLJSqlParserGeneral SQL Parser for Java,它们会从你的SQL中返回java类。

另一个选择是使用JPA而不是直接JDBC。例如,Hibernate具有出色的JPA支持,并且完全能够缓存您的查询。

如果您更接近JDBC,可以使用具有非常类似JDBC的语法和缓存支持的MyBatis

答案 1 :(得分:0)

考虑以下问题:

 String k1 = "Select * from table";   //Query1
 String k2 = "Select * from TABLE";  // Query2 ; notice TABLE is in caps

上述两个SQL查询都是相同的,并且将获取相同的数据。但是如果上面的查询被用作Memchached中的键,它们将被存储在不同的位置(因为k1.equals(k2)将返回false)。

此外,如果你能确保没有拼写错误或额外空格,那么密钥/查询可能会非常大,效率会不高。