用mysql+redis实现微博feed架构上需要注意哪些问题
2012-08-09 12:08
751 查看
微博中的feed(新鲜事)通常采用mysql+redis架构,当用户发一条微博时,系统会将该条微博写到其粉丝的feed列表中。目前有个疑问如果把mysql以写为主,redis只做缓存用来读,这在技术实现上需要注意哪些问题?
可以从架构思路上来说说,如以redis做缓存、以mysql为主、以redis为辅。
1、MySQL使用需要注意的地方
1) 存储引擎选择InnoDB,在高并发下读写有很好的表现
2) 数据合理分表分区,均衡各数据库服务器的负载
3) 适当作数据的冗余,便于在cache失效时的快速恢复
2、Redis使用需要注意的地方
1) 合理规划cache
将访问量高的热点数据统计出来、分类缓存。
对微博来说,主要有三种形式的缓存:IDs,content,page。
IDs包括各种关系的ID列表,如用户的粉丝、关注的对象、发表的新鲜事等,这些可以缓存在Redis的set或list结构中;
content包括各ID的具体信息及内容,如新鲜事的正文、用户的详细信息等,这些可以缓存在Redis的string或hash结构中;
page包括一些热点页面的部分内容或全部内容缓存,如名人主页等,这些可以缓存在Redis的string结构中。
根据以上缓存类型以及缓存的大小和过期时间,就可以规划出不同缓存如何存放、如何使用才能更高效地利用缓存的方式。
2) 缓存的压缩
在高访问量和高并发下,每一个字节的减少都是巨大的节省。
根据以上缓存类型的分析,我们可以对string结构的内容做压缩存储,如新鲜事的正文以及page cache等。
3、数据实时性与一致性
1) 实时性
在发表微博时,如果采用的是推送给粉丝的方式,为了保证快速响应,可以使用消息队列,先发表,再在后台推送。如果粉丝比较多,还可以将粉丝按照是否在线分组,通过不同队列发送。
2) 一致性
一致性主要是针对缓存与数据库中的数据不一致而言。
对于重要的数据,我们可以采取先写数据库再写缓存的方式来保证,而对于不太重要但对响应速度要求很高的数据可以采取先写缓存然后通过消息队列再写入数据库的方式。当然,需要做好错误日志记录以及能根据日志恢复数据。
本文转自互联网,在此感谢!
可以从架构思路上来说说,如以redis做缓存、以mysql为主、以redis为辅。
1、MySQL使用需要注意的地方
1) 存储引擎选择InnoDB,在高并发下读写有很好的表现
2) 数据合理分表分区,均衡各数据库服务器的负载
3) 适当作数据的冗余,便于在cache失效时的快速恢复
2、Redis使用需要注意的地方
1) 合理规划cache
将访问量高的热点数据统计出来、分类缓存。
对微博来说,主要有三种形式的缓存:IDs,content,page。
IDs包括各种关系的ID列表,如用户的粉丝、关注的对象、发表的新鲜事等,这些可以缓存在Redis的set或list结构中;
content包括各ID的具体信息及内容,如新鲜事的正文、用户的详细信息等,这些可以缓存在Redis的string或hash结构中;
page包括一些热点页面的部分内容或全部内容缓存,如名人主页等,这些可以缓存在Redis的string结构中。
根据以上缓存类型以及缓存的大小和过期时间,就可以规划出不同缓存如何存放、如何使用才能更高效地利用缓存的方式。
2) 缓存的压缩
在高访问量和高并发下,每一个字节的减少都是巨大的节省。
根据以上缓存类型的分析,我们可以对string结构的内容做压缩存储,如新鲜事的正文以及page cache等。
3、数据实时性与一致性
1) 实时性
在发表微博时,如果采用的是推送给粉丝的方式,为了保证快速响应,可以使用消息队列,先发表,再在后台推送。如果粉丝比较多,还可以将粉丝按照是否在线分组,通过不同队列发送。
2) 一致性
一致性主要是针对缓存与数据库中的数据不一致而言。
对于重要的数据,我们可以采取先写数据库再写缓存的方式来保证,而对于不太重要但对响应速度要求很高的数据可以采取先写缓存然后通过消息队列再写入数据库的方式。当然,需要做好错误日志记录以及能根据日志恢复数据。
本文转自互联网,在此感谢!
相关文章推荐
- 用mysql+redis实现微博feed架构上需要注意哪些问题
- Spring 整合redis集群 实现 以及过程中需要注意的问题点
- 三层架构变成两层架构以后需要注意的问题
- J2ME写好的应用程序打包,需要注意哪些问题?
- SEO优化和正确使用网站导航需要注意哪些问题
- mysql 写计数器需要注意的问题
- 二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现
- MySql在建立索引优化时需要注意的问题
- [征询意见]博客园购买新服务器时需要注意哪些问题
- 编写多线程java程序时需要注意哪些问题?(来自于effective java se)
- 【miscellaneous】多播的实现和需要注意的问题
- 【转】自定义排序函数实现时需要注意的问题
- JAVA实现zip压缩需要注意的问题
- ASP.NET中实现二级或多级域名(修改UrlRewrite)需要注意的问题
- js滚轮事件兼容性问题需要注意哪些
- mysql-5.5.37-linux2.6-x86_64.tar.gz 启动时需要注意的问题
- AI 将无处不在,首席信息官(CIO)需要注意哪些问题?
- MySQL中的一些特性和SQL语句中需要注意的问题
- 安装redis过程中需要注意的问题