data

package module
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 16, 2026 License: MIT Imports: 0 Imported by: 0

README

data

oekit 数据访问门面——复刻 ekit 单体库 data/ 能力面:cache/rediscache/crud/distlock/gormx/redisx/timertask/cachetest 八子包,一个 import 前缀直达

🌐 项目主页:https://oekit.github.io/ · 名称由来:Open Easy Kit(开源 · 易用 · 工具集合) 🤖 AI Agent:本仓规范与硬规则见 AGENTS.md;机器可读索引见 llms.txt(接口签名以源码为准)。

安装

go get github.com/oekit/data@v0.5.0

这个仓库做什么

data 是纯 re-export 门面:复刻 ekit 单体库 data/ 的能力面,类型为泛型 type alias(与源包完全同一类型,双向赋值互通),实现分别住在各子仓——

门面子包 能力 实现
cache 缓存接口(Cache/CacheAside/SourceFunc)+ LocalCache/SingleFlightCache + 键构造 + Checker pkg cache/
rediscache Redis 分布式缓存(CacheAside 的 Redis 后端) redisx cache/
crud 框架无关 CRUD Service/仓储 gormx crud/
distlock 分布式锁(RedisLocker/WithLock/优雅降级) redisx distlock/
gormx SQL/GORM 增强(Open/审计/OTel 插件/分页/单例仓储) gormx
redisx Redis 客户端封装(String/Hash/Set/ZSet/Bloom/Batch/PubSub) redisx
timertask 分片定时任务(FNV-1a 分片、心跳续约) timertask
cachetest CacheAside 实现契约测试套件(8 场景) pkg cache/cachetest/

缓存接口与契约套件已下沉 pkg 的 cache 子包(v0.4.0)——Redis 等后端实现依赖接口,接口必须位于门面下游。

快速使用

import (
    "github.com/oekit/data/cache"
    "github.com/oekit/data/rediscache"
)

// 本地缓存(L1)
local := cache.NewLocalCache(cache.LocalConfig[HotConfig]{
    TTL: 30 * time.Second,
    Source: loadHotConfig, // 未命中回源(Cache-Aside)
})

// Redis 缓存(L2)——与本地缓存实现同一 CacheAside 接口
remote := rediscache.NewRedisCache(redisCli, rediscache.RedisConfig[HotConfig]{
    Prefix: "hot:", TTL: 24 * time.Hour, Source: loadHotConfig,
})
cfg, err := local.GetOrLoad(ctx, "tenant:acme")

边界

  • 门面不含实现:本仓只做命名空间聚合(type alias + var 转发);源仓新增 导出符号时本仓壳需同步(跟版税由门面化决策承担,dependabot 只升 pin 不补壳)
  • 只用单一能力时直接依赖对应子仓(依赖面最小):gormx/redisx/timertask/pkg
  • 只需本地缓存的轻量场景可直接依赖 pkg 的 cache 子包(不经门面)
  • 需要"一键全家桶依赖聚合"(不 import 门面命名空间)的旧行为已废弃: github.com/oekit/data/all 已 retract(v0.5.0 起由本门面取代)

规划

  • 两级缓存装饰器(Local + Redis 读穿写透,原 all/ 模块的 TwoLevelCache): 等真实需求在门面子包立项(可实现为对两个 CacheAside 的组合装饰)
  • 两级缓存失效广播(Redis pubsub 主动失效 L1):单独立项

Documentation

Overview

Package data 是 oekit 数据访问门面——复刻 ekit 单体库 data/ 的能力面: 缓存、CRUD、分布式锁、GORM、Redis、定时任务,一个 import 前缀直达。

本仓是纯 re-export 门面:类型为泛型 type alias(与源包完全同一类型, 双向赋值互通),实现分别住在 pkg/cache 与 gormx/redisx/timertask 各子仓; 门面只做命名空间聚合,不持有实现。只使用单一能力时可直接依赖对应子仓 (依赖面最小);全家桶场景 go get github.com/oekit/data 即可。

子包地图(目标 ← 实现仓):

cache/      ← pkg/cache            缓存接口 + LocalCache/SingleFlightCache + 键构造 + Checker
rediscache/ ← redisx/cache         Redis 分布式缓存(CacheAside 的 Redis 后端)
crud/       ← gormx/crud           框架无关 CRUD Service/仓储
distlock/   ← redisx/distlock      分布式锁
gormx/      ← gormx                SQL/GORM 增强
redisx/     ← redisx               Redis 客户端封装
timertask/  ← timertask            分片定时任务
cachetest/  ← pkg/cache/cachetest  缓存实现契约测试套件

门面跟版约定:源仓新增导出符号时本仓壳需同步(dependabot 只升 pin 不补 壳);接口与契约的实现演进以源仓 README 为准。

Directories

Path Synopsis
all module
Package cache 是 data 门面子包:缓存域——接口(Cache/CacheAside/SourceFunc)+ 本地缓存(LocalCache/SingleFlightCache)+ 缓存键构造 + Checker。
Package cache 是 data 门面子包:缓存域——接口(Cache/CacheAside/SourceFunc)+ 本地缓存(LocalCache/SingleFlightCache)+ 缓存键构造 + Checker。
Package cachetest 是 data 门面子包:CacheAside 实现契约测试套件(8 场景,含 -race)。
Package cachetest 是 data 门面子包:CacheAside 实现契约测试套件(8 场景,含 -race)。
Package crud 是 data 门面子包:框架无关 CRUD——Service/Repository/查询构造。
Package crud 是 data 门面子包:框架无关 CRUD——Service/Repository/查询构造。
Package distlock 是 data 门面子包:分布式锁——RedisLocker + WithLock + 优雅降级。
Package distlock 是 data 门面子包:分布式锁——RedisLocker + WithLock + 优雅降级。
Package gormx 是 data 门面子包:SQL/GORM 增强——Open/连接池/审计与 OTel 插件/日志/分页/单例仓储/事务。
Package gormx 是 data 门面子包:SQL/GORM 增强——Open/连接池/审计与 OTel 插件/日志/分页/单例仓储/事务。
internal
testsame
Package testsame 提供门面壳测试的类型同一性编译期断言 helper。
Package testsame 提供门面壳测试的类型同一性编译期断言 helper。
Package rediscache 是 data 门面子包:Redis 分布式缓存(RedisCache,CacheAside 的 Redis 后端,跑 pkg/cache/cachetest 契约)。
Package rediscache 是 data 门面子包:Redis 分布式缓存(RedisCache,CacheAside 的 Redis 后端,跑 pkg/cache/cachetest 契约)。
Package redisx 是 data 门面子包:Redis 客户端封装——String/Hash/List/Set/ZSet/Counter/BloomFilter/Batch/PubSub 操作。
Package redisx 是 data 门面子包:Redis 客户端封装——String/Hash/List/Set/ZSet/Counter/BloomFilter/Batch/PubSub 操作。
Package timertask 是 data 门面子包:分片定时任务——Local/Redis 后端 + FNV-1a 分片 + 心跳续约。
Package timertask 是 data 门面子包:分片定时任务——Local/Redis 后端 + FNV-1a 分片 + 心跳续约。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL