Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Memcache实现设计_Java_Caching_Memcached - Fatal编程技术网

Java Memcache实现设计

Java Memcache实现设计,java,caching,memcached,Java,Caching,Memcached,我试图在我的web应用程序中实现memcache,只是想得到一些建议,看看我的设计是否正确 我有一个SimpleDataAccessor类,它运行我所有的insert、update和select sql查询。因此,任何必须执行的查询都在此类的方法内执行 因此,在我的select查询实现的方法中,我有一个方法,它将结果集存储在memcache中,如下所示 storeinMC(resultset.getJSON(),sqlquery) 这里的sqlquery是我的密钥 在运行selectquery之

我试图在我的web应用程序中实现memcache,只是想得到一些建议,看看我的设计是否正确

我有一个SimpleDataAccessor类,它运行我所有的insert、update和select sql查询。因此,任何必须执行的查询都在此类的方法内执行

因此,在我的select查询实现的方法中,我有一个方法,它将结果集存储在memcache中,如下所示

storeinMC(resultset.getJSON(),sqlquery)

这里的sqlquery是我的密钥

在运行selectquery之前,我还要在memcache中检查是否已经有了该查询的结果集

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

所以我一直努力让它简单明了。
您认为这有什么问题吗?

请考虑以下问题:

 String k1 = "Select * from table";   //Query1
 String k2 = "Select * from TABLE";  // Query2 ; notice TABLE is in caps
上述两个SQL查询都是相同的,将获取相同的数据。但是,如果将上述查询用作Memchached中的键,它们将存储在不同的位置(因为k1.equals(k2)将返回false)


另外,如果您能够确保没有输入错误或额外的空格,则不会非常有效,因为键/查询可能会非常大。

正如rai.skumar正确指出的那样,您的SQL语句可能会以不同的方式构造(例如,WHERE子句可能包含不同顺序的相同条件,等等)

因此,为了克服上述问题,您需要解析SQL并从中获取所有相关片段,然后将这些片段组合到缓存密钥中

您可以看看SQL解析器:,它将java类从SQL中返回

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


如果你觉得自己更接近JDBC,你可以使用它,它具有非常类似JDBC的语法和缓存支持。

你能确保你的sql查询是唯一的,因为它是键吗?你的查询中的打字错误/额外空格怎么办?是的,我想它是唯一的。从DB获取的每个数据都是唯一的,如果你认为是这样的话。如果不是,那么我们得到的是相同的我们将在memcache中获得值的数据。我得到了它。它可以用于小查询,我可以控制大写和其他打字错误。你能建议一个更好的设计实现吗。在这种情况下,我可以使用什么作为键。主约束仅是关键部分。Memchached的工作原理类似于HashMap,即键映射到对应的Ing值。因此,请确保您的密钥设计正确,并且可以保留任何值。谢谢。非常有用。我想当您运行复杂的sql查询时,设计有效的memcache设计并不容易。没问题!如果这是一个有用的答案,请不要忘记单击向上箭头!尝试过了;但我想我没有足够的声誉。