我有一个这样的数据结构(真实的节点级别更多):
-------Node 1------
| |
| |
Node A: Node B:
-element 1A1 -element 1B1
-element 1A2 -element 1B2
每个元素都由父母ID标识。每个节点和元素可以存储或不存储某些值。这些值是从父母继承的。所以当我想找到1A2的值时,我:
1) check if value for 1A2 exists
2) if not, check if value for A exists
3) if not, check if value for 1 exists
4) save the first found value
结构存储在数据库中,而且复杂得多。所以问题是数据库查询太慢了。但是这个结构并没有经常改变,所以我决定为它构建一个服务器端缓存。在结构中的任何更改之后删除缓存,并在第一次尝试读取某个元素的值时重建。问题是,当缓存键是这样的时候:
"1-A-1" for 1A1 value
"1-A-2" for 1A2 value
"1-A" for A value
"1" for 1 value
1A有值且1A1没有值但1A2有值,存储的第一个缓存是“1-A”。然后,当我试图找到1A2的值时,我首先搜索缓存,然后在那里找到适合我的元素的键“1-A”,因为它们是正确的节点。所以我没有对数据库进行任何查询,因为我认为,缓存中找到的值是正确的。但事实并非如此。 我怎么解决这个问题?有什么解决方案吗?我希望尽可能少地进行查询,但我总是希望找到给定元素的确切值。