1

我想更新存储在 redis 中的多个 servicestack 用户会话。我想返回所有将自定义属性设置为某个值的会话,然后我可以处理它们。目前,我拥有的最佳解决方案是这样返回所有键:

List<string> sessionkeys = redis.SearchKeys("urn:iauthsession:*");

我认为这不会很好地扩展。我想做一些类似于:

List<string> sessionkeys = redis.AllKeys.Where(x=>x.ParentId == 3);

redis 是否可以做到这一点,如果可以,最好使用带有 ServiceStack 的标准库。

4

1 回答 1

1

SearchKeys您不想使用更新的Redis Scan API,它可以让您遍历游标中的键。

Redis 值是 blobbed 且未编入索引,因此没有太多机会对此进行优化。最有效的方法是使用自定义服务器端 LUA 操作检查值,这将最大限度地减少发送到客户端的请求和有效负载的数量。

Redis 嵌入式版本的 LUA 有 cjson 可用于反序列化 JSON 值,Redis 用户的 Lua 指南有一些使用示例。

由于 Redis 不支持服务器端查询或索引,因此 Redis 的方式是预先存储您需要查询的查询并在保存 Session 时维护自定义索引,有关如何在 Redis 中维护自定义索引的一些信息位于:

在 ServiceStack 中,您可以OnSaveSession()在 AppHost 中覆盖,只要保存 Session,就会调用它。

于 2015-02-12T00:55:51.037 回答