缓存使用的一些注意事项
2012-06-01 19:03
302 查看
最近在项目中使用了很多缓存技术,包括局部缓存,远程集中式缓存,分布式缓存,在缓存的使用中也发现一些问题,整体总结如下:
1 使用局部缓存要注意内存溢出
一般局部缓存使用Map来实现,很容易无限制的往Map中填入数据,导致内存溢出。最好的方法就是使用SoftReference引用对象,而不是强引用对象
2 在分布式环境下使用局部缓存,如果缓存是同一类数据,比如同一张表的数据库配置,则需要考虑一个同步措施,保证各个集群之间的数据是在一致的。
一般情况下,需要每台集群机器定时刷新缓存,在刷新缓存的时候,注意要对缓存加锁。这种情况下,需要对某一时刻,个台机器之间的缓存状态是不一致的。
3 远程集中缓存需要考虑远程调用开销和缓存对象的序列化和反序列化开销。
远程缓存就需要通过远程调用缓存服务器来实现,远程调用开销比较大,所以缓存对象设置的要合理,避免获取一个完成对象的时候时候多次访问缓存信息。又由于序列化和反序列化的开销,缓存对象要尽可能的小。
4 远程集中式缓存需要考虑单点问题。如果缓存服务器宕机,所有的对缓存访问都失效。需要考虑备份的缓存服务器。
5 分布式缓存需要考虑缓存对象的分配算法,分配算法很重要,需要缓存请求能够平均的分配到各台缓存服务器。尤其当缓存机器增加一台或者减少一台的时候,分配算法需要考虑哈希一致性的问题。
6 分布式缓存也会存在某写缓存服务器宕掉问题,会影响1/N的缓存访问。
1 使用局部缓存要注意内存溢出
一般局部缓存使用Map来实现,很容易无限制的往Map中填入数据,导致内存溢出。最好的方法就是使用SoftReference引用对象,而不是强引用对象
2 在分布式环境下使用局部缓存,如果缓存是同一类数据,比如同一张表的数据库配置,则需要考虑一个同步措施,保证各个集群之间的数据是在一致的。
一般情况下,需要每台集群机器定时刷新缓存,在刷新缓存的时候,注意要对缓存加锁。这种情况下,需要对某一时刻,个台机器之间的缓存状态是不一致的。
3 远程集中缓存需要考虑远程调用开销和缓存对象的序列化和反序列化开销。
远程缓存就需要通过远程调用缓存服务器来实现,远程调用开销比较大,所以缓存对象设置的要合理,避免获取一个完成对象的时候时候多次访问缓存信息。又由于序列化和反序列化的开销,缓存对象要尽可能的小。
4 远程集中式缓存需要考虑单点问题。如果缓存服务器宕机,所有的对缓存访问都失效。需要考虑备份的缓存服务器。
5 分布式缓存需要考虑缓存对象的分配算法,分配算法很重要,需要缓存请求能够平均的分配到各台缓存服务器。尤其当缓存机器增加一台或者减少一台的时候,分配算法需要考虑哈希一致性的问题。
6 分布式缓存也会存在某写缓存服务器宕掉问题,会影响1/N的缓存访问。
相关文章推荐
- 缓存使用的一些注意事项
- 缓存使用的一些注意事项
- 缓存使用的一些注意事项
- Git使用教程(三)——Git使用的一些其它注意事项
- Excel COM组件使用的注意事项和一些权限问题
- mybatis select语句缓存使用注意事项
- 使用SQLServer2008R2进行缓存依赖通知需要注意事项
- Android Fragment 的使用,一些你不可不知的注意事项
- MERGE的使用一些注意事项
- 关于Runtime Permissions的学习以及使用的一些注意事项
- mybatis select语句缓存使用注意事项
- Unity中使用SLua的一些注意事项
- Android控件使用—EditText的一些注意事项
- 使用ObjectDataSource为ListView高效分页一些注意事项
- 在 Android 中使用 Kotlin 的一些注意事项
- ADO.NET Entity Framework (实体模型框架) 一些使用的注意事项
- pig使用的一些注意事项
- HBase Thrift 接口的一些使用问题及相关注意事项
- Excel COM组件使用的注意事项和一些权限问题(转载)
- Eclipse中使用CVS 的一些注意事项