文章目录
  1. 1. 1.关于API
  2. 2. 2.用户登录
  3. 3. 3.数据更新
  4. 4. 4.数据库
  5. 5. 5.Redis

1.关于API

  • RESTful API设计,参见阮一峰的blog
  • 根据对象来设计:比如“对象名称/操作名称”,如“user/delete”
  • 返回正确值和空值的类型保持一致(不要各种null)

2.用户登录

简单方法

  1. APP后台接收到用户名和密码,验证正确后生成一串token,在Redis中建立token字符串和用户信息的对应关系
  2. 后台将token传回
  3. 需要验证用户身份的操作必须传回token(token字符串附加在URL上)
  4. 退出登录时,后台将该用户对应的token删除

安全性修改

  1. Redis中建立token字符串和用户id的对应关系
  2. API请求不直接附加token字符串,而是附加原“URL+token”的md5值作为签名,同时附加用户id而后再传

防止攻击者重放

  1. 加入时间戳
  2. 客户端和服务端进行时间校准

更进一步

  1. 使用自定义通信协议
  2. 使用加密算法
  3. 支付密码永远不在APP端保存

3.数据更新

  1. 轮询(典型的”拉“),每隔一段时间向App后台发送请求
  2. 服务端推送,客户端接收消息后再拉取
  3. 使用”updateTime“增量更新,设置since(从何时开始)和latest(想要取得的最新时间),取得两者之间服务器端更新的内容。
  4. (增量更新中的删除)在后台把需要删除内容的updateTime更新到最新,设置delete字段为1,则APP本地获取后,就进行删除。

4.数据库

MySQL的两种引擎:InnoDB和MyISAM

InnoDB支持行锁和外键,事务安全
MyISAM支持表锁,不支持外键,事务不安全

索引

  • 给合适的列简历索引
  • 索引列的值尽可能不同
  • 使用短索引(字符类型指定长度)
  • 利用最左前缀

优化建议

  1. 避免使用select * (传输量过大,耗费时间)
  2. 字段设置为NOT NULL(除非需要严格区分未填和空)
  3. 缓存(系统缓存、MySQL缓存和Redis应用缓存)
  4. 分库分表(详见李智慧《大型网站技术架构核心原理与案例分析》)
  5. 分析慢查询记录

5.Redis

  • 全部数据操作在内存,保证了高速
  • 提供了丰富多样的数据类型
  • AOF和RDB两种数据持久化方式
  • 所有操作都是原子性

数据类型

  1. String:比较灵活(缓存商品分类等)
  2. hash:类似数据库,存储对象的数据(根据id获取信息等)
  3. list:按照插入顺序排序的字符串列表(消息队列、发送短信等)
  4. set:无序且不重复的集合(共同好友等)
  5. sorted list:有序且不重复
文章目录
  1. 1. 1.关于API
  2. 2. 2.用户登录
  3. 3. 3.数据更新
  4. 4. 4.数据库
  5. 5. 5.Redis