Redis-backed TokenStore for moon-token: shared sessions across processes and instances, with family CAS, Lua get-and-delete and a session index that pages exactly like the in-memory adapter
Dependencies
| 键 | 形状 | 说明 |
|---|---|---|
| {realm}:T:{token} | STRING | 会话记录;到期点用 PEXPIREAT |
| {realm}:A:{login_id} | STRING(整条 FamilyRecord) | 反向族索引;写必须 CAS,见下 |
| {realm}:Z | ZSET(member=token,score=登录时刻) | list_sessions 的枚举源 |
| {realm}:S: / R: / D: / P: | STRING | 账号态 / refresh 绑定 / 封禁 / 授权快照 |
async fn uses_redis_store() -> String raise {
let host = match @env.get_env_var("MT_REDIS_HOST") {
Some(v) => v
None => "127.0.0.1"
}
let db = match @env.get_env_var("MT_REDIS_DB") {
Some(v) => match @port.parse_int64(v) {
Some(n) => n.to_int()
None => 0
}
None => 0
}
let store = @redis_store.RedisStore::open("user", host, db=db)
defer store.close()
let key = store.keys.token("demo")
// 4e12 ms ≈ 2096 年:示例不碰真实时钟,也不受机器时间影响
let far : Int64 = 4_000_000_000_000L
store.set(key, "v=1|login=demo", far)
match store.get(key) {
None => "没读到"
Some(text) => text
}
}
async test "Redis 后端就是同一个端口" {
if @env.get_env_var("MT_REDIS_TEST") is Some("1") {
assert_eq(uses_redis_store(), "v=1|login=demo")
} else {
println("SKIP README 示例: 未设 MT_REDIS_TEST=1")
}
}Install
Download zipRedis-backed TokenStore for moon-token: shared sessions across processes and instances, with family CAS, Lua get-and-delete and a session index that pages exactly like the in-memory adapter
Dependencies