您的位置:首页 > 数据库 > Redis

数据中间平台(php,mysql,redis)

2011-04-28 23:45 281 查看
一.需求描述

从 A (外部接口,http或socket接口等等) 取到xml格式数据,然后存储到平台B(中间平台),对外部提供各种接口,返回JSON格式数据,平台C,D,E.....等等从平台B取数据,需求其实很简单,在这只是分析下中间可能的种种问题,怎么解决,也希望大家多提宝贵意见。

其中从A取数据,每次持续时间较长,估计十几分钟左右,另外C,D,E等等外部平台对B连接比较频繁,具体峰值现在还不好估算。



二.开发环境

linux+php+apache+mysql+redis



三.设计思路

1. 取数据模块,从A通过http接口取数据,进入mysql做持久化存储,同时数据进入redis做缓存,需要设计mysql表对应的redis结构。

每次取数据时间较长,通过php长连接方式或php批处理方式处理,避免服务断开。

具体方式见php长连接处理整理:http://blog.csdn.net/lxzo123/archive/2011/04/28/6370715.aspx

2. 对外发布http接口,同时开关控制从redis取数据还是mysql取数据,声明一点,该数据时效性较强,外部每次访问都返回最新数据

需要提供翻页接口,默认外部连接redis缓存,当redis中取不到对应数据才进行查询mysql库。

3. redis数据删除,由于数据每天都很多,需要对redis数据进行定期删除一些比较旧的数据,可以按一定规则进行,比如几天前的数据就删除,或者redis中数据大于一定数目,就删除最早的数据。

4. 统计分析功能,如用户连接数,等等。



四.具体实现描述

1.mysql表结构设计,再此简单设计代替,因为是公司项目。

新闻栏目表 create table news_category (

id integer, 新闻栏目ID

category varchar2新闻栏目名称

);



新闻结构表 create table news_info (

id integer ,新闻ID

title varchar2 新闻标题

create date 新闻发生时间

categoryid 所属栏目ID

);



新闻内容表 create table news_content(

id integer 新闻ID

content varchar 新闻内容

);

其它省略.



2. redis对应结构体设计

新闻栏目用hash存储 key: news:category field: 栏目id value:栏目名称

新闻ID用zset存储,因为需要翻页处理,list没有提供返回index接口,处理翻页不是特别完美(后续再说明),zset结构

key: news:id:index:[栏目ID] score: (next:id:index自增为一个string) member :新闻ID

新闻结构体通过hast存储 key: news:info:[栏目ID]:[新闻ID] field: 对应表中字段名称 value:对应字段值





先到此为止,改天继续补充
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: