我想更新存储在redis中的多个servicestack用户会话 . 我想返回所有自定义属性设置为某个值的会话,然后我可以处理它们 . 目前我得到的最佳解决方案是返回所有密钥:
List<string> sessionkeys = redis.SearchKeys("urn:iauthsession:*");
我认为这不会很好 . 我想做一些类似的事情:
List<string> sessionkeys = redis.AllKeys.Where(x=>x.ParentId == 3);
这是可能的redis,如果是这样,理想情况下使用ServiceStack标准库 .
1 回答
而不是
SearchKeys
,您希望使用更新的Redis Scan API's,它允许您迭代光标中的键 .Redis值是blobbed而没有索引,因此没有太多机会对其进行优化 . 最有效的方法是使用自定义server-side LUA operation检查值,这将最小化发送到客户端的请求和有效负载的数量 .
Redis嵌入式LUA版本有cjson可用于反序列化JSON值,Lua guide for Redis users有一些使用它的例子 .
由于Redis不支持服务器端查询或索引,因此Redis的方法是在保存Session时预先查询查询和维护自定义索引的查询,有关如何在Redis中维护自定义索引的一些信息位于:
Storing Related Entities and Maintaining Custom Indexes
Designing a NoSQL Database using Redis
在ServiceStack中,您可以覆盖AppHost中的
OnSaveSession()
,每当保存会话时都会调用它 .