Pārlūkot izejas kodu

Gitbook Auto Published

Willin Wang 8 gadi atpakaļ
vecāks
revīzija
4fa89922a6
5 mainītis faili ar 167 papildinājumiem un 0 dzēšanām
  1. 2 0
      SUMMARY.md
  2. BIN
      _static/project/hmap.png
  3. 28 0
      project/db/redis.md
  4. 52 0
      project/tool/babel.md
  5. 85 0
      project/user/cache.md

+ 2 - 0
SUMMARY.md

@@ -21,10 +21,12 @@
     - [MySQL](project/db/mysql.md)
     - [Redis](project/db/redis.md)
   - [Tool](project/tool/README.md)
+    - [Babel](project/tool/babel.md)
     - [守护进程PM2](project/tool/pm2.md)
   - [开发指南](project/develop.md)
     - [功能模块设计](project/user/module.md)
     - [数据库设计](project/user/db.md)
+    - [缓存设计](project/user/cache.md)
 - [运维](operation/README.md)
   - [SHELL](operation/shell.md)
   - [CI工作流](operation/workflow.md)

BIN
_static/project/hmap.png


+ 28 - 0
project/db/redis.md

@@ -1,5 +1,33 @@
 # Redis
 
+## 代码示例
+
+一般Redis里存储的数据需要一个默认的TTL,即到期删除,尽可能避免无用数据长期存储。
+
+```js
+import redis from 'wulian-redis';
+
+const client = redis({
+  host: '127.0.0.1',
+  port: 6379,
+  db: 0
+});
+
+(async()=>{
+  // 推荐
+  await client.set('trial:127.0.0.1', 1, 900);
+
+  // 或
+
+  // 需要注意,如果该`key`之前已存在,且ttl已设置,重新set之后,ttl会变成-1(永久);
+  await client.set('trial:127.0.0.1', 1);  
+  // TTL: 900s
+  await client.expire('trial:127.0.0.1', 900);
+})();
+```
+
 ## 注意事项
 
 * 设置TTL,默认超时时间
+* Value值为字符串,如果JSON数据存之前要`JSON.stringify`,取之后要`JSON.parse`
+* 具体Redis命令参数参考 <http://redis.io/commands>

+ 52 - 0
project/tool/babel.md

@@ -0,0 +1,52 @@
+# Babel
+
+<http://babeljs.io/>
+
+`babel-node`和`babel-register`功能基本相近。
+
+配置文件参考: <https://github.com/w2fs/best-practice>
+
+## Babel-Register
+
+项目内安装
+
+```bash
+npm install babel-register --save
+```
+
+使用:
+
+创建`babel.js`
+
+```js
+require('babel-register');
+module.exports = require('./server.js');
+```
+
+执行:
+
+```bash
+node babel.js
+```
+
+## Babel-Node
+
+全局安装:
+
+```bash
+npm install babel-cli -g
+```
+
+使用:
+
+```bash
+babel-node xxx.js
+```
+
+### 编译 ES5 代码
+
+```bash
+babel src --out-dir dist
+```
+
+源目录`src`,目标目录`dist`。

+ 85 - 0
project/user/cache.md

@@ -0,0 +1,85 @@
+# 缓存设计
+
+缓存结构设计示例。
+
+## 说明
+
+常规结构:
+
+```
+Type:Key:SubKey
+```
+
+用`:`区分,在管理工具上会自动变成文件夹可收缩。
+
+## 注册频率限制
+
+Key:
+
+```
+reg:#手机唯一id或注册ip#
+```
+
+Value:
+
+```
+成功注册的用户名或手机号
+```
+
+(记录可以有迹可循,如果不需要查询,直接记录固定值,如`1`即可)
+
+TTL: 1800(s)
+
+说明:
+
+> 注册成功后创建该`key`;判断,如果取到非`null`值,禁止注册。
+
+
+## 登录尝试限制
+
+Key:
+
+```
+trial:#手机唯一id或登录ip#
+```
+
+Value:
+
+```
+错误尝试次数
+```
+
+TTL: 1800(s)
+
+说明:
+
+> 初次尝试新建该`key`,值为1;判断,如果值大于3,禁止登录。
+
+## 复杂缓存结构示例
+
+接口性能监控,如图:
+
+![Image](/_static/project/hmap.png)
+
+结构:
+
+Key:
+
+```
+api:#记录日期#
+```
+
+Value: 数组(通过Redis `HSet`和`HGet`命令进行存储和读取)
+
+```js
+[
+  key:'#total(总计)/来源(如android-xxx/ios-xxx/device-xxx/web-xxx)/路径(如app1/v2/path/action)#'
+  value: { // JSON.stringify(#对象#)
+    count: '请求次数',
+    success: '成功次数',
+    avg: '平均响应时间',
+    max: '最大响应时间',
+    min: '最小响应时间'
+  }
+]
+```