Jcs的原理是利用缓存获取用户所需要的数据,减少对数据库的访问,从而提高存储效率。实现该方案的需要解决两个问题:
1. 缓存的数据从哪来
2. 缓存的数据的有效性
1. 缓存的数据从哪来
从根源来讲,缓存的数据应当在查询过数据后放入cache,通常用户在进行业务流程时,查询数据、放入缓存。但是这样存在一个问题,第一次查询不会用到缓存,如果第一次查询时的数据量非常巨大,jcs就没有作用了。
提前加载:
当用户登录系统时,用户身份验证通过后,将所需数据放入缓存,这样在用户第一次查询数据时就可以用到cache。
优点:第一次查询就能提高效率;
命中高,根据用户id查询,cache中必然包含该用户所需的信息;
缺点:登录时间会变长,影响用户体验;
系统加载:
当系统启动时,使用filter进行提前加载,将常用数据使用jcs进行缓存。
优点:第一次查询能够使用缓存,相对前一种方式,用户登录的数据也可以从缓存中获取;
缓存数据全(无用户信息,因此进行全量查询缓存);
缺点:数据容易失效,针对变更频繁数据不宜使用;
针对大量数据(万级以上),jcs效果会折扣;
基本缓存:
最常用的方式,当用户第一次查询数据时,将数据放入缓存,缓存的数据会在用户使用的过程中逐渐补全;
优点:性能高,放入缓存的数据量通常很小;
高可靠性,使用缓存不当,容易产生脏数据(缓存未更新,与实时数据不符),该方法可以提高数据更新率,防止脏数据。
缺点:第一次无法使用;
缓存数据健全过程慢;
2. 缓存数据的有效性
缓存的数据需要进行更新,从而保证数据的有效性。通常来说有两个步骤:① 删除旧数据; ② 补充更新
① 删除旧数据的前提是数据发生了变更,如modify、delete等操作。此时需要从缓存中将旧数据更新(含删除)。
针对多工程的数据共享有两种方案:
1)使用消息的方式,通知其他共享服务器更新缓存(如MQ消息服务);
2)使用缓存服务器,统一存放缓存(jcs提供相关功能);
② 补充更新的方案可以结合上面提到的缓存的数据从哪来,使用提前加载、基本缓存等方式,可以快速实现数据的更新,保证数据的完整。
补充一句话:没有完美的解决方案,只有针对不同情况产生的最优方案!