2022-29周 前端进阶整理
新知识
1、好文学习
1.1、如何写一篇技术文章
开发项目或做学习时,多小步记录,则方便整合汇总;
文章标题夺人眼球;
干货;
图片(尤其是展示结构的图片);
提纲,论据、论点;
结构不宜过深,篇幅不宜过长,通读无错别字,形象;
个人思考:技术文章通常包含一些原理性才更具有价值,原理只是架构虽然详实严谨,但是如果可以加上形象的例子更容易理解;但本身技术就比较抽象,功夫还需深;
2、ts(TypeScript)实用程序类型
Partial 构造一个所有属性都Type设置为可选的类型
Required 构造一个所有属性都Type设置为必填的类型
Readonly 只读,不可覆盖
Record<Keys, Type> 构造一个对象类型,属性键为 keys,属性值为 type,常用于一种类型的属性映射到另一种类型,name-info
Pick<Type, Keys> 挑选某类型中的某些项组合成新的类型
Omit<Type, Keys> 去除类型中某些项
Exclude<UnionType, ExcludedMembers> 重联合成员排除部分成员
Extract<Type, Union> 从联合中提取构造新的类型,取交集
NonNullable 排除 null、undefined 这种nullable类型
Parameters 从函数类型的参数中使用的类型构造元组类型Type
type T2 = Parameters<<T>(arg: T) => T>;
ConstructorParameters 从构造函数类型的类型构造元组或数组类型。它产生一个包含所有参数类型的元组类型(或者never如果Type不是函数的类型)
ReturnType 构造一个由 function 的返回类型组成的类型Type
InstanceType 构造一个类型,该类型由 中的构造函数的实例类型组成Type。
class C {
x = 0;
y = 0;
}
type T0 = InstanceType<typeof C>;
// type T0 = C
ThisParameterType 提取函数类型的this参数的类型,如果函数类型没有参数,则为未知this
Uppercase 大写
Lowercase 小写
Capitalize 大写
Uncapitalize 取消大写
OmitThisParameter 从 中删除this参数Type
ThisType 此实用程序不返回转换后的类型
3、node连接redis服务
Remote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
redis较之于mysql简化很多,且内存存取,常用于做一些内存字段小如密码类的存储内容小的字段内容;
使用 ioredis npm包
// 封装 RedisHelper
const Redis = require('ioredis');
const redisPass = 'xx';
class RedisHelper {
static redisInstance = null;
constructor() {
if (!RedisHelper.redisInstance) {
const redis = new Redis({
host: host,
port: 6379,
password: redisPass,
});
RedisHelper.redisInstance = redis;
}
}
/**
* 存redis,返回promise
* @param {*} key
* @param {*} value
*/
set(key, value) {
const redisInstance = RedisHelper.redisInstance;
const redisStr = JSON.stringify(value);
return redisInstance.set(key, redisStr);
}
/**
* 读redis,返回promise
* @param {*} key
*/
get(key) {
const redisInstance = RedisHelper.redisInstance;
return redisInstance.get(key).then((redisStr) => {
return JSON.parse(redisStr);
});
}
}
module.exports = RedisHelper;
// 引用
const RedisHelper = require('utils/redisHelper');
const redis = new RedisHelper();
redis.get(key).then((result) => {
/* result 的类型
{
start: number, // 开始时间
time: number, // 持续时间
ok: boolean, // 是否有效 - 待确认
}
*/
// 处理超时时间,重置key
return redis.set(key, cacheData);
});
4、Memcached 内存对象缓存系统
是一个简洁的key-value存储系统。Memcached 官网
感觉同redis类似,均为一主多从分布式;
建议选择redis,不仅支持类型多,还可以持久化存储数据;简单 key-value可以考虑memchached,复杂持久对数据类型有要求选redis,因为redis支持数据结构还包含list、set、hash等;
Redis和memcached的区别和使用场景
问题
1、npm windows下 命令 export DEV_MODE=‘true’ && npx --node-arg=–inspect tsw config=./config/dev/config.js
export -> set
node-arg -> node-options
2、定时任务部署多台服务器同时触发
为避免同时触发,可结合redis进行key值设置“互斥锁”;不存在,设置key值并处理定时任务,若存在则不做处理