NHibernate主要有三种缓存:
1. 一级缓存.
一级缓存的生命周期和作用域只在同一Session中, 以[主键-对象]方式存放.
2. 二级缓存.
二级缓存的生命周期和作用域在同一SessionFactory中, 同样以[主键-对象]方式存放. 二级缓存的读取读取优先级不如一级缓存高, 所以当SessionA和SessionB中都存在同一对象的一级缓存时, 其中一个Session更新对象缓存, 另一个Session会因为优先读取一级缓存而返回未更新的对象.
3. 查询缓存.
查询缓存的生命周期和作用域同样只于同一SessionFactory中, 以[查询语句-对象ID序列]方式存放, 即只缓存查询结果集的所有对象ID. 当查询数据发生改变(增加、删除、修改等),查询缓存会将其从缓存中删除. 该过程比较不透明, 建议使用查询缓存还是根据程序业务来制定较好.