首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以在不更新缓存的情况下从NgRx服务中获取数据吗?

NgRx是一个用于构建响应式应用程序的状态管理库,它基于Redux模式。在NgRx中,数据存储在一个中央存储库中,称为Store。当应用程序中的某个组件需要访问数据时,它可以从Store中获取数据。

在一些情况下,我们可能需要从NgRx服务中获取数据而不更新缓存。这可以通过使用选择器(Selectors)来实现。选择器是一个纯函数,它从存储库中选择和转换数据,而不会修改存储库中的数据。

通过使用选择器,我们可以在不更新缓存的情况下获取数据。选择器可以从存储库中选择数据,并对其进行任何必要的转换或过滤,然后返回所需的数据。由于选择器是纯函数,它们不会修改存储库中的数据,因此不会更新缓存。

以下是一个示例选择器的代码:

代码语言:txt
复制
import { createSelector } from '@ngrx/store';
import { AppState } from './app.state';

// 选择器函数,从存储库中选择数据
const getData = (state: AppState) => state.data;

// 创建选择器
export const selectData = createSelector(
  getData,
  (data) => data
);

在上面的代码中,selectData是一个选择器,它选择存储库中的data数据,并返回它。这个选择器不会更新缓存,因为它只是从存储库中选择数据。

在应用程序的组件中,我们可以使用selectData选择器来获取数据,而不更新缓存。例如:

代码语言:txt
复制
import { Component } from '@angular/core';
import { Store, select } from '@ngrx/store';
import { selectData } from './selectors';

@Component({
  selector: 'app-my-component',
  template: `
    <div>{{ data$ | async }}</div>
  `,
})
export class MyComponent {
  data$ = this.store.pipe(select(selectData));

  constructor(private store: Store) {}
}

在上面的代码中,data$是一个Observable,它订阅了selectData选择器。通过使用async管道,我们可以在模板中订阅并显示数据,而不更新缓存。

总结起来,通过使用选择器,我们可以在不更新缓存的情况下从NgRx服务中获取数据。选择器是纯函数,它们从存储库中选择数据并返回它们,而不会修改存储库中的数据。这使得我们可以在应用程序中使用选择器来获取数据,而不会更新缓存。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

可以source脚本情况下将变量Bash脚本导出到环境

echo $VAR 有没有一种方法可以通过只执行 export.bash 而 source 它获取 $VAR? 答: 不可以。 但是有几种可能解决办法。...调用 shell 上下文中执行脚本: $ cat set-vars1.sh export FOO=BAR $ . set-vars1.sh $ echo $FOO BAR 另一种方法是脚本打印设置环境变量命令.../set-vars2.sh)" $ echo "$FOO" BAR 终端上执行 help export 可以查看 Bash 内置命令 export 帮助文档: # help export export...-f 指 shell 函数 -n 每个(变量)名称删除 export 属性 -p 显示所有导出变量和函数列表 ---- 参考: stackoverflow question 16618071...help eval 相关阅读: 用和不用export定义变量区别 shell编程$(cmd) 和 `cmd` 之间有什么区别 ----

14320

Angular 接入 NGRX 状态管理

存储状态做出相应改变; Selector:用于获取存储状态切片纯函数; Effects:基于流实现副作用处理,以减少基于外部交互状态。...,并使用 props 约束所接收参数类型; 增加用于删除用户DelUser,并使用emptyProps表示传递任何参数(仅存储一位用户); 创建根据 Action 来更新状态 Reducer:...Actions: 这里 UpdateUser 同样是 emptyProps,仅作为触发使用,更新用户数据接下来副作用编写中会体现: import { createActionGroup, emptyProps...: 接入实体代码 todo.reducer.ts 文件中体现,下面是接入实体核心部分,更多适配器操作可以看文件默认生成模板代码: // 1....Todo 进行添加、更新、删除、批量添加、批量更新、批量删除、清空等操作,还可以通过其内置 Selector 方便获取 Todos 数据数据长度等等信息,可以简化一大部分开发时间。

17010

一个Angular 5教程:一步一步指导实现你第一个Angular 5应用程序

版本2开始,Angular不再是一个JavaScript框架,所以它们之间有很大区别,保证了一个基本名称变更。 应该使用Angular?...或者,您可能已经在所有那些华丽AngularJS演示中看到了它,您可以在其中输入要输入值并为我们更新页面内容。 这里有一个有趣小技巧:Angular,双向数据绑定已经不再适合我们了。...我们日志可以看出,我们正在明确调度Action,但没有服务器请求在这里为我们提供。怎么了?我们忘了将我们效果加载到我们AppModule。...我们还需要case cards.ADD:我们减速器删除分支。让我们尝试一下: ? 出于某种原因,我们卡片添加操作获取重复数据。让我们试图找出原因。...你remove action现在可以用同样方法。当我们订阅获取数据时,您只需要实现该Remove效果。但我会把它留给你。 路由和模块 我们来谈谈我们应用程序组合。

42.5K10

写在 2021: 值得关注学习前端框架和工具库

作者:林渡 https://juejin.cn/post/6935670539088461855 最近在知乎看到了这么个问题:学完Vue还有必要学习React和Node?...Immer[14],思路巧妙数据不可变方案。 Angular! Angular[15] 是最近正在学框架,开始前其实是拒绝,但写了两个例子之后觉得真香!...你可能同样犹豫要不要学这玩意,意见是:学!因为确实NodeJS目前没有特别全面的框架(虽然NestJSSpring面前也是弟弟)。...强大地方在于实现了一套GraphQL缓存方案(GraphQL不像REST API那样可以用URL作为缓存key,它只有单个schema,要缓存必须基于Schema拍平整个数据结构,然后再基于各个field...Hasura还提供了前面说GraphQURL作为client,hasura-code-gen来Hasura服务生成TS代码,所以基本上可以用Hasura生态做为一套方案了,包括也有看到过一些创业公司就在使用

4.2K10

写在2021: 值得关注学习前端框架和工具库

Immer,思路巧妙数据不可变方案。 Angular! Angular 是最近正在学框架,开始前其实是拒绝,但写了两个例子之后觉得真香!...你可能同样犹豫要不要学这玩意,意见是:学! 因为确实NodeJS目前没有特别全面的框架(虽然NestJSSpring面前也是弟弟)。...强大地方在于实现了一套GraphQL缓存方案(GraphQL不像REST API那样可以用URL作为缓存key,它只有单个schema,要缓存必须基于Schema拍平整个数据结构,然后再基于各个field...它提供GraphiQL就是上面提到增强版本: Hasura还提供了前面说GraphQURL作为client,hasura-code-gen来Hasura服务生成TS代码,所以基本上可以用Hasura...也可以关注微信公众号:【前端留学生】 每天更新最新技术文章干货。

2.8K10

代码层面优化系统性能解决方案

我们拿使用缓存来作为一个案例讲解,先看一个图: ? 这是一个最简单图,应用服务定期 redis 获取配置信息,可能会有朋友认为这样已经很稳定了,但是如果 Redis 出现问题呢?...那么在此种场景下解决方案是,要把缓存使用分级别,有的缓存同步要求时效性非常高,比如支付限额配置,在后台修改完成以后前台立刻就能够获得感知,并且能够成功切换,这种情况只能实时 Redis 获取最新数据...,但是每次获取完最新数据后都可以同步更新本地缓存,当单点 Redis 挂掉后,应用程序至少还能从本地读取信息而不至于服务瞬间挂掉。...这种方式通过应用服务 Ehcache 定时轮询 Redis 缓存服务器更同步更新本地缓存,缺点是因为每台服务器定时 Ehcache 时间不一样,那么不同服务器刷新最新缓存时间也不一样,会产生数据不一致问题...部分项目拆分彻底 拆分前 ? 注: 一个 Tomcat 布署多个应用 war 包,彼此之间互相牵制并发量非常大情况下性能降低非常明显。 拆分后 ?

69730

再也不用担心面试官问RecycleView了

RecyclerView预取机制 如何实现RecyclerView局部更新,用过payload,notifyItemChange方法参数?...获取缓存流程: AttachedScrap获取,通过pos匹配holder——>获取失败,CacheView获取,也是通过pos获取holder缓存 ——>获取失败,自定义缓存获取缓存——>获取失败...,mRecyclerPool获取 ——>获取失败,重新创建viewholder——createViewHolder并bindview。...四级缓存和流程说一下。 滑动10个,再滑回去,bindview可以是19次调用,可以是16次调用。 缓存其实就是缓存itemview,Recyclerview中就是viewholder。...如何实现RecyclerView局部更新,用过payload,notifyItemChange方法参数?

1.4K20

「面试题」20+Vue面试题整理

可以做一些初始数据获取,在当前阶段无法与Dom进行交互,如果非要想,可以通过vm.$nextTick来访问Dom。...当表达式过于复杂时,模板中放入过多逻辑会让模板难以维护,可以将复杂逻辑放入计算属性处理。 Watch没有缓存性,更多是观察作用,可以监听某些数据执行回调。...(看到这你还会发现,框架内无处蕴藏着数据结构和算法魅力) ❝面试官:(可以可以,看来是个苗子,不过自我介绍属实有些无聊,下一题) ❞ (基操,勿6) 14.再说一下虚拟Dom以及key属性作用 由于浏览器操作...父子组件通信 父->子props,子->父 $on、$emit 获取父子组件实例 $parent、$children Ref 获取实例方式调用组件属性或者方法 Provide、inject 官方推荐使用...sourceMap优化 用户体验 骨架屏 PWA 还可以使用缓存(客户端缓存服务缓存)优化、服务端开启gzip压缩等。

1.1K20

硬核!16000 字 Redis 面试知识点总结,建议收藏!

可以看出,这里已经从缓存获取数据了,因为上一步 add 方法已经把 id=4 用户数据放入了 Redis 缓存 3、调用删除方法,删除 id=4 用户信息,同时清除缓存: ?...面试官:Redis 雪崩了解了解,目前电商首页以及热点数据都会去做缓存,一般缓存都是定时任务去刷新,或者查不到之后去更新缓存,定时任务刷新就有一个问题。...或者设置热点数据永不过期,有更新操作就更新缓存就好了(比如运维更新了首页商品,那你刷下缓存就好了,不要设置过期时间),电商首页数据可以用这个操作,保险。...面试官:那你了解缓存穿透和击穿么,可以说说他们跟雪崩区别:嗯,了解,先说下缓存穿透吧,缓存穿透是指缓存数据库中都没有的数据,而用户(黑客)不断发起请求。...:Redis 为了保证效率,数据缓存在了内存,但是会周期性更新数据写入磁盘或者把修改操作写入追加记录文件,以保证数据持久化。

2.2K34

Redis面试

可以看出,这里已经从缓存获取数据了,因为上一步 add 方法已经把 id=4 用户数据放入了 Redis 缓存 3、调用删除方法,删除 id=4 用户信息,同时清除缓存: ④再次调用查询接口...,查询 id=4 用户信息: 没有了缓存,所以进入了 get 方法, userMap 获取。...面试官:Redis 雪崩了解了解,目前电商首页以及热点数据都会去做缓存,一般缓存都是定时任务去刷新,或者查不到之后去更新缓存,定时任务刷新就有一个问题。...或者设置热点数据永不过期,有更新操作就更新缓存就好了(比如运维更新了首页商品,那你刷下缓存就好了,不要设置过期时间),电商首页数据可以用这个操作,保险。...:Redis 为了保证效率,数据缓存在了内存,但是会周期性更新数据写入磁盘或者把修改操作写入追加记录文件,以保证数据持久化。

50220

12 张图 | 硬刚了一波,三层缓存架构

5.2 更新 另外当客户端获取注册信息时,也会先读只读缓存,如果只读缓存没有,则会读写缓存找,找到后就放到只读缓存。...如果读写缓存没有,则从本地注册表 registry 中加载到读写缓存,然后将注册表信息返回。 这里大家是否有个疑问:既然这个缓存叫做只读缓存,怎么还能被更新,不应该是不变?...只读缓存每隔 30s 才会刷新一次,和读写缓存会造成数据不一致,客户端 30s 内获取注册表信息是滞后。...如何缓解不一致问题呢? (1)服务端,我们可以设置更新只读缓存时间间隔,默认是 30 秒,缩短一点,比如 15 秒,频率太高,可能对 Eureka 造成性能问题。...默认情况下,每隔 30 秒读写缓存将注册信息更新到只读缓存。 默认情况下,客户端读取注册表时,先从只读缓存读,如果没有,则从读写缓存读取,如果还是没有,则从本地注册表 registry 读取。

64410

Eureka读写锁奇思妙想,学废了吗?

前言 很抱歉 好久没有更新文章了,最近一篇原创还是去年十月份,这个号确实荒废了好久,感激那些没有把取消关注小伙伴。 有读者朋友经常私信问我: ”你号卖了?“ ”文章咋更新了?...,增量获取时候必须要加写锁来保证获取数据准确性,这里先不详细展开,后续会一点点讲解 我们先看几个常见场景: 服务A启动时候需要向注册中心发送regist请求,注册表会将服务A写入自己花名册...服务B发送下线请求,告知注册中心 要下线了,请把注册表请求,此时注册表会把服务B花名册抹掉 服务C在运行过程也需要定时拉取注册表最新数据,然后将数据同步到本地,这样本地就可以通过服务名去发现其他服务了...即使是获取增量注册表数据,也会注册中心缓存获取,当EurekaClient对注册表进行register/cancel......因为refreshAfterWrite是后台异步刷新,其他线程访问旧值,只会有一个线程执行刷新,不会出现多个线程刷新同一个Key缓存 当然这些可能也是多虑并没有去实际测试这种场景,猜测在请求量很大情况下

49650

Angular 2 + 折腾记 :(3)初步了解服务及使用

前言 探究高深理论,只探究实际使用,有更好写法或者经验请指出; 有些暂时没涉及到知识可能会顺着例子解释; ---- 什么是服务 简言之:就是资源获取,以及通讯逻辑处理地方; Angular2...详情看这个; 【依赖注入:】 【依赖注入:英】 看github上有些项目的service写很复杂(很重),但是不大喜欢这样。 力求service内少处理复杂逻辑。...{ // DI(依赖注入) // 常规写法 this.authHttp = new AuthService(); // 这个写法也是可以,官方推荐,说不好维护(当项目大起来时候...: any) // 这样就可以使用了,且components内不需要引入对应服务!!!!...@Inpu(),@Output()..感觉不需要ngrx这种状态管理 服务可以贯穿全局(全局注入),事件广播这些都可以实现 服务不应该太重(比如处理一些复杂逻辑),一个服务内部应该清晰,简洁。。

1.6K20

Redis常见问题答疑

rehash相关 Redis里hash容量到一定程度时候,会做渐进式rehash,Redis有没有提供一些可以配置,让可以指定hash大小,这样可以防止hash较大情况下,发生多次rehash...事物 lua脚本可以会保证原子性?实际测试给了错误参数,部分命令运行成功,部分命令运行失败,最终还是不符合原子? lua只保证了隔离性,并不保证原子性。...如果客户端向实例 2 请求 key3时,因为key 3还在实例2,那么此时客户端是需要等待实例 2把key3迁移到实例 3,才能获取到key3数据? key还在原来实例,直接返回。...缓存数据库一致性 先修改了数据值后,为什么删除缓存数据更新缓存数据好呢? 如果去更新缓存更新过程数据源又被其他请求再次修改的话,缓存又要面临处理多次赋值复杂时序问题。...布隆过滤器第一次还是会直接访问缓存缓存没有再访问DB上,如果未获取数据,就在布隆过滤器上进行添加,下次有相同请求时候,直接屏蔽该请求。是这个做法

67710

Redis实战篇

当我们使用 Redis 作为缓存时候,一般流程是这样∶ 如果数据 Redis 存在,应用就可以直接Redis 拿到数据,不用访问数据库。...这里我们主要考虑更新缓存代价。 更新缓存之前,是不是要经过其他表查询、接口调用、计算才能得到最新数据,而不是直接数据库拿到值。...方案二:(异步更新缓存) 因为更新数据库时会往 binlog 写入日志,所以我们可以通过一个服务来监听binlog变化(比如阿里canal),然后客户端完成删除key操作。...对于这个映射方法,我们有几个基本要求∶ 因为我们值长度是固定希望不同长度输入,可以得到固定长度输出。...原来只用一个哈希函数,现在对于每一个要存储元素都用多个哈希函数计算,这样每次计算出来下标都相同概率就小得多了。 同样,我们能不能引入很多个哈希函数呢?比如都计算100次,都可以?

84220

论代码级性能优化变迁之路(二)

2、实际生产环境,经常出现数据库死锁导致整个服务中断不可用。 3、数据库事务乱用,导致事务占用时间太长。 4、实际生产环境服务器经常出现内存溢出和CPU时间被占满。...7、配置信息和变动不大信息依然会数据库中频繁读取,导致数据库IO很大。 8、项目拆分彻底,一个tomcat中会布署多个项目WAR包。...Paste_Image.png 这是一个最简单图,应用服务定期redis获取配置信息,可能会有朋友认为这样已经很稳定了,但是如果Redis出现问题呢?...那么在此种场景下解决方案是,要把缓存使用分级别,有的缓存同步要求时效性非常高,比如支付限额配置,在后台修改完成以后前台立刻就能够获得感知,并且能够成功切换,这种情况只能实时Redis获取最新数据...,但是每次获取完最新数据后都可以同步更新本地缓存,当单点Redis挂掉后,应用程序至少还能从本地读取信息而不至于服务瞬间挂掉。

34620

缓存这7个坑,把坑惨了!!!

然后,还需要一段代码,把数据查询到结果,又重新放入缓存。办法挺多,在这里就不展开了。2.2 自动续期出现缓存击穿问题是由于key过期了导致。...比如参与秒杀活动热门商品,由于这类商品id并不多,缓存我们可以设置过期时间。秒杀活动开始前,我们先用一个程序提前数据查询出商品数据,然后同步到缓存,提前做预热。...程序中有个全局开关,比如有10个请求最近一分钟内,redis获取数据失败,则全局开关打开。后面的新请求,就直接配置中心中获取默认数据。...当然,还需要有个job,每隔一定时间去redis获取数据,如果在最近一分钟内可以获取到两次数据(这个参数可以自己定),则把全局开关关闭。后面来请求,又可以正常redis获取数据了。...缓存命中:无法从缓存获取数据,而要从数据获取其他途径获取数据。我们肯定是希望缓存命中率越高越好,这样接口性能越好,但实际工作却经常啪啪打脸。

9520

缓存数据双写一致性

Redis Sentinel 高可用 Redis Cluster 集群详解 额,列出来都没感觉关于 Redis 居然写了这么多...言归正传。...更新难道不应该这么更新?在这里,我们关注点更多放在了更新方式上,而把更多必要性给忽略到了。我们更新了这个值之后,接下来一段时间内,它会被频繁访问到?...这个思路就类似于懒加载方式,只需要时候去计算它。 争议在哪儿? 前面提到过,更新时顺序为先更新 DB 数据,成功之后再删除缓存。但是也有人认为应该先删除缓存,再去更新 DB 数据。...而且,如果删除缓存成功,但更新 DB 失败了,大不了下次获取时,再将数据写回缓存即可,可以说十分合理。 但,这只是单线程情况下,如果在多线程下,会直接造成致命数据不一致。...上面的流程图详细描述了情况,更新请求1刚刚把缓存数据删除,查询请求2就过来了,查询请求2会发现缓存是空,所以按照 Cache Aside Pattern 读请求标准,会 DB 中加载最新数据并将其写入缓存

72710

MySQL查漏补缺

查询时, 未使用limit 1情况下, 匹配到一条数据后, 唯一索引即返回, 普通索引会继续匹配下一条数据, 发现匹配后返回. 如此看来唯一索引少了一次匹配, 但实际上这个消耗微乎其微....MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更. 查询缓存可能会失效非常频繁, 对于一个表, 只要有更新, 该表全部查询缓存都会被清空....因此对于频繁更新表来说, 查询缓存不一定能起到正面效果. 对于读远多于写可以考虑使用查询缓存. 8.0版本查询缓存功能被删了 ( ̄. ̄)....简要说一下数据库范式 第一范式: 属性不可再分. 第二范式: 一范式基础上, 要求数据库表每个实例或行必须可以被惟一地区分. 通常需要为表加上一个列, 以存储各个实例惟一标识....第三范式: 二范式基础上, 要求一个数据库表包含已在其它表已包含非主关键字信息. 所以第三范式具有如下特征:1). 每一列只有一个值. 2). 每一行都能区分. 3).

2.3K20
领券