jfinal 中Db.findByCache()中我看了底层的实现
public List<Record> findByCache(String cacheName, Object key, String sql, Object... paras) { ICache cache = config.getCache(); List<Record> result = cache.get(cacheName, key); if (result == null) { result = find(sql, paras); cache.put(cacheName, key, result); } return result; } 这里其实存储的是引用不是值,我在后来把引用给修改了,我第二次在获取的时候, 获取到的是我修改过后的值,而不是最开始从数据库中查询出来的值。 这点我踩了个大坑。而且我也没有找到Record的克隆的方法,如果手动去一个个的设置值会很麻烦
有的应用场景,就是希望去更新缓存中的数据,如果从缓存中读数据每次都是是 clone 出来的,那么缓存中的数据永远无法更新,只能 remove 掉