1、memcached的优势是什么?
1) 分布式 。2)相对应用服务器的内存而言,可以进行单点访问。3)性能强。
2、不太适合采用Memcached缓存的情况?
1) 如果Value特别大,不太适合。默认编译下Memcache只支持1M的Value。事实上由于存在序列化反序列化的过程,所以从实践的角度来说也不建议把非常大的数据保存在
Memcache中。Memcache适合面向输出的内容缓存,而不是面向处理的数据缓存,也就是不太适合把大块数据放进去拿出来处理之后再放回去,而是适合拿出来就直接给输出了或是拿
出来不需要处理直接使用。
2) 如果不允许过期,不太适合。Memcache在默认情况下最大30天过期,而且在内存达到使用限制后它也会回收最近最少使用的数据。
3、清除部分缓存数据的过程?
可采用命名空间(在Memcache的语境下可采用Key前缀的办法代替,例如设置Key为“子系统名称+实体名+实体的ID”)的办法来实现,用以区分不同类型的缓存内容,以便在需要的
时候可以清除某一类缓存。
4、Value的组织问题?
主要涉及被缓存的数据的颗粒度,比如要保存一个数据表,是一行数据保存在一个键值还是统一保存为一个键值。如果数据保存的粒度很小的话最好是在获取的时候能够批量获取,在保存
的时候也能够批量保存,也就是说对于跨网络的调用次数越少越好。
5、memcache中Key的约定和命名规范?
第一种:一般是项目名称+字符常量(实体名或表名等)+返回PO的id(或者唯一标示都可以)。这种方法代码一般会嵌入到Service中,从而破坏service的业务逻辑,耦合性较高。可以
考虑在action层与service层中间加入一层,来降低耦合性。
第二种:可以用spring aop来拦截你要缓存的service,唯一key可以通过类名+方法名+参数名等来组成;这种方法适用于分模块开发 ,因为调用的都是同一个类中的方法,但是拦截器也
会在一定程度上影响性能。但是可以提高开发的效率,还有就是不会破坏service层的业务逻辑。
第三种:用sql语句+id(或者查询条件)。这种方法不是很好。