Java Memcache实现设计
我试图在我的web应用程序中实现memcache,只是想得到一些建议,看看我的设计是否正确 我有一个SimpleDataAccessor类,它运行我所有的insert、update和select sql查询。因此,任何必须执行的查询都在此类的方法内执行 因此,在我的select查询实现的方法中,我有一个方法,它将结果集存储在memcache中,如下所示 storeinMC(resultset.getJSON(),sqlquery)强> 这里的sqlquery是我的密钥 在运行selectquery之前,我还要在memcache中检查是否已经有了该查询的结果集 if((String res=getRSFromMC(sqlquery)==null) 所以我一直努力让它简单明了。Java Memcache实现设计,java,caching,memcached,Java,Caching,Memcached,我试图在我的web应用程序中实现memcache,只是想得到一些建议,看看我的设计是否正确 我有一个SimpleDataAccessor类,它运行我所有的insert、update和select sql查询。因此,任何必须执行的查询都在此类的方法内执行 因此,在我的select查询实现的方法中,我有一个方法,它将结果集存储在memcache中,如下所示 storeinMC(resultset.getJSON(),sqlquery) 这里的sqlquery是我的密钥 在运行selectquery之
您认为这有什么问题吗?请考虑以下问题:
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设计并不容易。没问题!如果这是一个有用的答案,请不要忘记单击向上箭头!尝试过了;但我想我没有足够的声誉。