2015-07-01 82 views
0

我构建安全服务作为组成应用程序的一组服务的一部分。我正在考虑使用Redis存储会话。会话是这样的数据结构:用于会话存储的Redis

{ 
    string : sessionToken 
    DateTime : expiryUtc 
    string[] : permissionKeys 
} 

我只需要创建,读取和删除会话。如果我可以让Redis删除过期会话,那么很好但不是必需的。作为Redis的一个小菜鸟,我有一些阅读需要做,但是有Redis经验的人可以给我任何正确的方法来实现这个目标,假设Redis是一个不错的选择。顺便说一下,我在Mono平台上,并且迄今为止选择了StackExchange.Redis客户端,因为在某个阶段我想要对Redis进行集群。我愿意改变这种选择。

+0

既然你说的是单声道,内置的redis会话状态出现在我的脑海。 [这里是链接。](http://blogs.msdn.com/b/webdev/archive/2014/05/12/announcing-asp-net-session-state-provider-for-redis-preview-release。 aspx)'PermissionKeys'是存储在会话中的对象。 –

回答

1

您可以使用Redis散列,它们将与您的结构相匹配:http://redis.io/topics/data-types-intro#redis-hashes
会话令牌可以是整个散列的关键字。 StackExchange Redis客户端具有KeyExpire方法,可以使用DateTime参数,因此您可以让Redis过期您的密钥。
在Redis哈希中,您不能拥有嵌套结构,因此您的permissionKeys和任何其他将进入内部的值必须存储为简单值 - 您可以将它们序列化为json。
另外一个哈希值是允许进行内存优化:http://redis.io/topics/memory-optimization#use-hashes-when-possible如果您将创建多个会话(因为Redis会将所有这些会话存储在RAM中),这可能非常有用。

相关问题