- 分布式缓存
- 缓存从本质上来说,就是一个内存hash表。hash表数据读写时间复杂度是O(1)
- 许多语言支持获取任意对象的hashcode,甚至把hashcode理解为对象的唯一标识符,Java中把hashcode放在object中。
- 缓存需要缓存那些读写比很高、很少变化的数据,一般来说读写比在2:1以上时,缓存才有意义
- 应用程序读取数据时,首先到缓存中读取,如果缓存不存在或者已失效,再访问数据库,同时将新的数据放入缓存
- 缓存也需要注意缓存热点数据
- 缓存预热,在新启动的缓存系统中,在启动时就加载热点数据,这样启动后就可以直接使用
- 缓存穿透, 应用持续大量访问不存在的数据,因为这类数据不存在于缓存中,因此会大量访问数据库,从而降低性能
- 对于分布式缓存来说,目前有两类:
- 1)不同的缓存服务器之间进行通信,例如JBoss Cache;
- 2)不同缓存服务器之间不进行通信,例如Memcached
- 异步操作
- 一般会使用消息队列,带来的额外好处是会削平峰值
- 使用集群