文档准备中 ...

在说缓存之前需要先了解 AutoCSer 的核心设计目标统一规划全局数据定义
下面我来说说我为了实现这个目标在实战中是如何规划与设计数据定义的,当然这些只是实现这个目标的一条途径与我个人的一些经验(仅供参考),并不是说一定要这样去做才能达到设计目标。
这里主要说的是需要持久化的数据,我认为关系型数据库的二维表格 + 表格之间的关联关系是通用的适合查询与持久化的数据描述方式,所以我会和使用关系数据库一样先把数据按照需求规划到不同的表格数据模型
一个表格数据模型主要由物理数据逻辑数据两部分组成,物理数据映射到物理存储设备(比如数据库表格字段),逻辑数据主要由其它数据缓存实时计算而来。
物理数据需要根据缓存策略需求分成多个分组,比如 查询数据 + 常用数据 + 各种小数据 使用默认的整表缓存分组,非常用数据 + 大文本数据 使用具有淘汰策略的扩展缓存分组。对于数据量较小而且内存充足的需求可以考虑只使用默认的整表缓存分组。
数据 API 服务化的序列化操作默认仅处理表格数据模型,所以表格数据模型的默认生成代码中会包含入侵派生类型的二进制序列化配置JSON 序列化配置表格数据模型不应该包含其它字段或者属性。
数据表格继承自表格数据模型,主要包括 4 方面的扩展数据定义:基于表格数据模型的计算属性、数据服务本地关联扩展、数据服务本地缓存关联扩展、数据服务远程关联扩展
由于基于缓存的数据服务初始化时间可能比较长,为了让数据服务更新部署的时候尽可能小的影响到数据的读取,所以数据服务分为写服务读服务。服务更新的时候先停止旧的写服务,然后启动新的写服务并同时预加载缓存数据,然后启动新的读服务并停止旧的读服务。

AutoCSer 在命名空间 AutoCSer.Sql.Cache 中提供了一些常用的缓存组件,命名空间 AutoCSer.Sql.Cache.Whole 是整表缓存组件,命名空间 AutoCSer.Sql.Cache.Counter 是具有淘汰策略的缓存组件。
每一个缓存分组只能有一个主缓存,主缓存用于管理缓存数据对象并对外提供缓存数据更新事件。命名空间 AutoCSer.Sql.Cache.Whole.Event 是整表主缓存组件,命名空间 AutoCSer.Sql.Cache.Counter.Event 是具有淘汰策略的主缓存组件。
如果 AutoCSer 提供的缓存组件无法满足你的需求,你可以自定义数据结构并绑定数据表格的写操作事件 OnInserted / OnUpdated / OnDeleted 同步更新数据。