V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Sin
V2EX  ›  程序员

服务端有什么类似 Vue 依赖收集模式的实现吗?用来在数据更新后做刷新缓存之类的操作

  •  
  •   Sin · 2022-07-04 11:55:09 +08:00 · 1323 次点击
    这是一个创建于 905 天前的主题,其中的信息可能已经有所发展或是发生改变。
    6 条回复    2022-07-04 16:20:37 +08:00
    zcf0508
        1
    zcf0508  
       2022-07-04 12:12:31 +08:00 via Android
    做过一个 python 的尝试
    noe132
        2
    noe132  
       2022-07-04 12:14:58 +08:00
    @vue/reactivity 可以单独拿出来用的。
    rxjs 其实也有些类似的东西
    tairan2006
        3
    tairan2006  
       2022-07-04 12:43:46 +08:00
    虽然不知道 vue 是咋实现的,不过在服务端这个需求一般用消息队列…
    Sin
        4
    Sin  
    OP
       2022-07-04 12:57:27 +08:00
    @tairan2006
    之前服务端代码里涉及到消息通知、缓存刷新之类的工作都是主逻辑完了手工主动调用的,比较繁琐,扩展性差,key 多了管理起来也很麻烦。所以想能不能有一种声明式或者自动化的方法来处理这样的工作
    尝试过的方法包括订阅 ORM 事件、实体类的 AOP 拦截(有点类似 vue 的实现了)等等,想问下有没有现有的比较好的完整实践
    tairan2006
        5
    tairan2006  
       2022-07-04 13:00:55 +08:00
    @Sin 解耦的方案是通过数据库 binlog 订阅分发…
    pastor
        6
    pastor  
       2022-07-04 16:20:37 +08:00
    我先假定 OP 是指 web 类的服务,在这个基础之上,OP 提出的这个问题本身是错误的,原因:
    1. 对于前端:技术模型是有渲染树、数据更新则需要对应的视图更新,换另一个词就是有状态,前端的画面显示是跟数据、状态对应的
    2. 对于后端:web 类的服务是无状态的接口为主,一个请求来了,都去查询、写入公共的缓存、数据库即可,每次与缓存、数据库的交互本身就是一个完整的原子流程、只要更新了也就相当于刷新了因为下次或者其他请求也是查缓存数据库,根本就不存在如何刷新的需求

    对于其他类型的有状态服务,单进程内你可以简单的发布订阅去实现一个数据更新时自动回调订阅者来实现多个模块及时刷新数据、状态相关的,如果是多进程多服务,队列之类的发布订阅来实现跨进程的数据同步也可以,但如果涉及到并发时序与事务相关的,则需要认真设计、避免因为乱序导致数据不一致的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5935 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:50 · PVG 09:50 · LAX 17:50 · JFK 20:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.