我们考虑在数据库持久层做一个memcache缓存,用于降低数据库的查询压力。memcache中存储的数据库数据是一行结果作为存储,以行的主键+表名称进行存储。对于复杂的查询,直接用SQL语句的哈希值作为key,结果存储结果集的每行数据的主键列表信息。这里存在一个问题,当SQL语句结果集对应的表数据在insert/update/delete操作,使得原来缓存的数据过时。有没有好点的算法,比较准确的判断SQL缓存数据是否过期?举个例子,加上SQL语句:select * from a ,b where a.col1 = 'test' and b.col2='test2' ,查询出的结果有1000条,数据缓存后,有个用户对表b数据进行了修改,该操作可能影响到上述SQL语句的查询结果。大家对这种情况,具体都是如何判断处理缓存是否需要更新的?
另外还有一个问题,就是并发同步问题。memcache推荐的是CAS,但是这样需要在取出数据后,这个CAS值需要一直在系统中流转,对于上面的使用数据方来说,不太合适。否则这个CAS值也不好处理,大家怎么解决的?