race-cache 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
race-cache 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
race-cache 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
race-cache 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
race-cache 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发缓存系统
开源组织
地区 国产
投 递 者 随心_
适用人群 未知
收录时间 2020-12-14

软件简介

race-cache

确保依赖数据的高可用缓存函数。

执行步骤如下: 

Install

npm install --save race-cache

Usage

import { raceCache, raceCacheWithInfo } from 'race-cache'

async function getList(url){
  const data = await raceCache(url /*缓存Key*/, fetch(url))
  // or
  const info = await raceCacheWithInfo(url /*缓存Key*/, fetch(url))
  // info?.ok info?.timeout info?.error info.data
}

内置缓存在浏览器环境使用 localStorage,在 node.js 环境使用的原生 Map,可通过 cache 参数进行自定义缓存接口。

API

import { raceCache, raceCacheWithInfo, cache } from 'race-cache'

raceCache(key, promise[, option])
// or
raceCacheWithInfo(key, promise[, options])

// 内置缓存对象cache
cache.get
cache.set
cache.unset
cache.clear
cache.setCapacity
...

注: 内置缓存 LRU 容量默认为:99

interfaces

interface RaceCacheOptions<T> {
	// 内置缓存超时时间,单位:ms
	// 默认:3600 * 24 * 365 * 1000
	expire?: number;
	// 等待外部响应时间,超时后走缓存数据,单位:ms
	// 默认:0
	waitTime?: number;
	// 是否忽略promise的异常catch,并使用缓存数据
	// 默认:true
	ignoreError?: boolean;
	// 获取内部状态信息,如:数据是否超时、异常或正常的返回
	raceCallback?: (raceInfo: RaceInfo<T>) => void;
	// 自定义缓存接口:get,set
	cache?: {
        get: (key: string) => Promise<any>;
        set: (key: string, value: any, options?: CacheOptions | undefined) => Promise<void>;
  };
	// 超时触发回调,只在缓存存在的情况下触发
	onTimeout?: (value: GetPromiseResolveType<T>) => void;
	// 传入的 promise 触发 resolve 时调用
	onFulfilled?: (value: GetPromiseResolveType<T>) => void;
	// 传入的 promise 触发 reject 时调用
	onRejected?: (reason: any) => void;
}

interface RaceInfo<T> {
    // 正常返回标识
    ok?: boolean;
    // 超时返回标识
    timeout?: boolean;
    // 异常返回标识
    error?: any;
    // 返回数据
    data: GetPromiseResolveType<T>;
}

interface CacheOptions {
	// 缓存超时时间,单位:ms
	expire?: number;
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2015/05/26 11:17

bob的race

HUD4123 Bob’s Race 题目描述: 首先给出一棵树,n~5e4,然后要求求出每个点出发走不重复路径到达的最远的距离.之后,找出最长的连续的节点的长度,使得他们的之中最大值减去最小值小于等于给出的Q.一共问了M~500次Q. 题解: 完全分为两部分:先求出每个点最远到达长度.常用的树形dp.首先一次dp出节点u为根的dpm和dps,保证这两个没有相交的路径.之后再dfs出u,含义是u往上身的最长长度,即是说把u的儿子们都砍了,以u出发的最长长度.这...

0
0
发表了博客
2018/09/25 14:44

go race detector

https://golang.org/doc/articles/race_detector.html Data Race Detector Introduction Usage Report Format Options Excluding Tests How To Use Typical Data Races Race on loop counter Accidentally shared variable Unprotected global variable Primitive unprotected variable Supported Systems Runtime Overhead Introduction Data races are among the most common and hardest to debug types of bugs in concurre...

0
0
发表于开发技能专区
2016/09/01 22:54

golang之race

golang虽然有`牛逼`的goroutine,但是由于底层还是多线程的,并没有解决在多核编程里面不需要加锁的问题。Erlang有解决?所以在golang里面该加锁的地方,还是得由`你自己`去控制加锁。说实话,这个特性为也挺讨厌,这会显著增加编写golang的复杂性。使用其他语言,线程会被仔细的设计,数据只在线程中被保护,所以相对出错的机会并不多。但是,由于go里面的goroutine很方便的被创建,可以说无处不在。很容易就`忘记加锁`了。 废...

0
0
发表了博客
2018/08/05 13:14

Race condition

在很多门课上都接触到race condition, 其中也举了很多方法解决这个问题。于是想来总结一下这些方法。 Race condition 它旨在描述一个系统或者进程的输出依赖于不受控制的事件出现顺序或者出现时机。此词源自于两个信号试着彼此竞争,来影响谁先输出。 举例来说,如果计算机中的两个进程同时试图修改一个共享内存的内容,在没有并发控制的情况下,最后的结果依赖于两个进程的执行顺序与时机。而且如果发生了并发访问冲突,则最后...

0
0
发表了博客
2018/08/02 16:56

Uva12034 Race(递归)

Uva12034 Race Description Disky and Sooma, two of the biggest mega minds of Bangladesh went to a far country. They ate, coded and wandered around, even in their holidays. They passed several months in this way. But everything has an end. A holy person, Munsiji came into their life. Munsiji took them to derby (horse racing). Munsiji enjoyed the race, but as usual Disky and Sooma did their as usu...

0
0
发表了博客
2018/04/18 21:21

818. Race Car

818. Race Car 原题 题目大意 有3个值: position 初值 0 speed 初值 1 target 有2个操作: A $$position=positionspeed$$ $$speed=2speed$$ R $$position=position$$ $$speed=\begin{cases} -1& \text{ if } speed>0 \ 1 & \text{ if } speed \leq 0 \end{cases}$$ 求要使$position=target$至少需要几步操作。 思路 BFS 直接对于任一(position,speed)对有两种操作,全部遍历,就可以在第一次达到target时得到结果,且由于ARR操...

0
0
发表了博客
2019/03/31 19:13

[CF671E] Organizing a Race

题目大意 有$n$个加油站排成一行,编号为$1\sim n$ ,$i$与$i+1$间有一条长为$w_i$千米的道路。 一辆汽车在经过加油站$i$时会得到$g_i$升汽油 , 假设汽车每行驶一千米需要消耗一升汽油。 现在要求选定两个合法的加油站 $i$ 、$j$, 且 $i\le j$,使得一辆没有油的汽车能从$i$出发行驶到 $j$,也能从$j$出发行驶到$i$ 。 你有$K$次操作,每次操作能使选定一个$i$ , 使$g_i$增加 $1$。 对于所有合法的$i$与$j$ ,求$j − i + 1$的最大值。...

0
0
发表了博客
2018/07/21 13:01

[LightOJ1038] Race to 1 Again

传送门:>出错啦< 题意:给你一个整数n,每一次可以随机选择一个n的因子x(包括1和它自己),让n除以x——不停重复此过程,直到n==1. 问n被除到1的期望次数。 解题思路:   今天刚学的期望Dp,这道题就算入门啦,顺带总结一下期望Dp的做题方法。   一般的,我们可以设$f[i]$表示从状态i到目标状态的期望次数。因此我们可以先确定本题的目标状态——n变为1. 因此在本题中,我们可以设$f[i]$表示$n==i$时到$n==1$的期望次数。...

0
0
发表了博客
2019/02/05 18:11

golang cache--go-cache

go-cache是一款类似于memached 的key/value 缓存软件。它比较适用于单机执行的应用程序。 go-cache实质上就是拥有过期时间并且线程安全的map,可以被多个goroutine安全访问。 下面举例说明其用法。 Demo package main import ( "log" "time" "github.com/patrickmn/go-cache" ) func main(){ c := cache.New(30*time.Second, 10*time.Second) c.Set("Title", "Spring Festival...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
1 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部