CachedQuery
一段简单的缓存查询结果的代码段。
核心**是把Service层查询数据的逻辑和Controller层获取数据的逻辑分成两个线程,中间用一个缓存对象产生联系。
也就是产生了更新数据线程和获取数据线程这两个线程。
- 更新数据线程就是不停的根据设定的延迟更新缓存对象。
- 获取数据线程就是Controller层获取缓存对象的数据并返回。
要解决的问题有:
- Controller层初次获取数据时阻塞线程,防止返回空数据,涉及到两个线程的交流
- 保证在设定的更新延迟内不停循环更新缓存对象,不能简单地使用Thread.sleep阻塞,这样会导致数据时效性较差
- 尝试了一下流式Builder的写法