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(或者查询条件)。这种方法不是很好。