在我的上一篇文章使用spring aop实现URL地址参数权限控制中,一开始我使用了本地缓存对配置好了的URL拦截等数据进行缓存,以提高AOP判断权限的效率,但在后来考虑到,如果系统使用集群的方式进行部署,这种本地缓存方式并不能共享缓存数据,每台集群服务器上都需要维护一份缓存,并且因为缓存生成的时机,是在保存了URL拦截配置之后处理的,这又可能会造成每台集群服务器上维护的缓存数据会有差异,那么解决的办法就是使用独立缓存服务器进行缓存的管理,幸好公司的系统中已经提供了对应缓存接口的实现。
因此我只需要将本地缓存的方法,改成使用注入的ICache接口去操作缓存即可,这样,当系统是在集群的情况下使用,则只需要在spring的beans配置文件中,将ICache接口实现类修改为MemcachedImpl即可实现缓存方式的切换。
在系统只是单机使用时,可以使用默认的MemcachedImpl,当然,也可以配置成MemcachedImpl,但在单机使用以及缓存数据量不大的情况下,本地缓存就足够了,存取的速度更快,存储的数据结构也更丰富。
在说到memcached时,我又想到了经常被拿来比较的另一个缓存框架--Redis,当我们需要缓存的数据量不大,需要缓存的数据能使用简单的key-value存储的话,使用memcached就足够了,但如果对数据持久化和数据同步有要求,或者需要缓存服务器能支持更复杂的结构和操作,则Redis会是一个更好的选择,Redis的数据可以持久化,在重新启动之后数据依然存在,而memcached重启之后,数据将丢失,如果多台memcached服务器数据丢失,可能会出现“惊群”问题,找不到缓存的请求都直接向数据库发送请求,获取数据,短时间内给数据库带来压力可能是巨大的。