whoru

学习、分享、交流、沉淀

1. PM2 是什么?

PM2 = Process Manager 2

ADVANCED, PRODUCTION PROCESS MANAGER FOR NODE.JS

PM2 is a daemon process manager that will help you manage and keep your application online 24/7

上面是官网给出的 title,简单来说:它是在后台运行的 Node.js 进程管理器,提供一套针对生产环境运行时的工具集,可以保障你的程序 7 * 24 小时在线。

官网:https://pm2.keymetrics.io

文档:https://pm2.keymetrics.io/docs/usage/quick-start

总结其主要特性如下:

  • 日志管理:应用程序日志保存在服务器的硬盘中 ~/.pm2/logs/
  • 负载均衡:使用 Node cluster 集群模块,可以通过创建共享同一服务器端口的多个子进程来扩展您的应用程序。这样做还允许您以零秒停机时间重新启动应用程序,实现热重载。
  • 终端监控:可以在终端中监控您的应用程序运行状况,包括CPU使用率,使用的内存,请求/分钟等。
  • 自动停止不稳定的进程(避免无限循环)
  • 支持静态服务器功能
  • 提供 HTTP API
阅读全文 »

1. 基本特性

  • 速度快

    • 基于 C 语言开发,源码短小精悍
    • 数据存在内存中
    • 单线程(高性能,因为 Redis 一次只会运行一条命令,应避免在生产环境使用比较耗时的命令。)
  • 支持数据持久化,异步保存到磁盘

  • 丰富的数据结构(key-value):string、list、hash、set、zset

  • 多语言客户端

  • 功能丰富:发布订阅;Lua 脚本;等

  • 简单

    • 核心代码量小
    • 不依赖外部库
    • 单线程模型
  • 支持主从复制

  • 原生高可用和分布式解决方案

    • Redis-Sentinel 高可用 v2.8+
    • Redis-Cluster 分布式 v3.0+
阅读全文 »

Day.js 是一个轻量的 JavaScript 时间日期处理库,与 Moment.js 的 API 设计保持一致。

本文只介绍了一些常用操作,关于国际化、插件、自定义等高级内容详见官方文档。

其主要特性如下:

  • Moment.js 相同的 API 和用法
  • 不可变数据(Immutable)
  • 支持链式操作(Chainable)
  • 只有 2kb 大小(一些高级用法以扩展的形式存在,可按需加载
  • 全浏览器兼容
  • 强大的国际化支持(I18n)

官网:https://day.js.org/en

Github:https://github.com/iamkun/dayjs

阅读全文 »

MemCache

  • 多线程、异步I/O,可以充分利用多核 CPU 的优势,性能优秀
  • 功能简单,使用内存存储数据
  • 限制
    • key 小于 250B
    • value 小于 1M
    • key 最大失效时间小于 30 天
    • 只支持 K-V 结构,不支持持久化和主从同步

Redis

  • 单线程(可以借助多进程,以更好的发挥单机性能)
    • 异步非阻塞I/O(多路复用)
      • 多路:多个网络连接
      • 复用:复用同一个线程
    • 避免多线程上下文切换的代价
    • 避免多线程造成各种锁的问题
  • 数据在内存存储,支持持久化
  • 支持更多的数据类型,list、hash、set等
  • 主从 Sentinel +集群 Cluster,能够提供高可用服务

大多数计算机语言,有且仅有一个表示“无”的值,比如:C 语言的 NULL,Java 语言的 null,Python 语言的 None,Ruby 语言的 nil。

但是在 JavaScript 中却同时存在 undefinednull,这主要是由于历史原因,感兴趣的可以查一下。

二者的主要用法区别如下:

  • undefined
    • 变量被声明了,但没有赋值时,就等于 undefined
    • 调用函数时,应该提供的参数没有提供,该参数等于 undefined
    • 对象没有赋值的属性,该属性的值为 undefined
    • 函数没有返回值时,默认返回 undefined
  • null
    • 作为函数的参数,表示该函数的参数不是对象。
    • 作为对象原型链的终点。

⚠️ 注意:在 JavaScript 中 undefined 是一个全局变量,而不是关键字!

  1. 为了避免无意中被篡改,建议使用 void 0 来获取 undefined 值。
  2. 在比较时,建议使用 if (typeof var1 === 'undefined') {}