我正在构建一个安全服务,作为构成应用程序的一组服务的一部分。我正在考虑使用Redis来存储会话。会话是一种如下所示的数据结构:
{
string : sessionToken
DateTime : expiryUtc
string[] : permissionKeys
}
我需要做的就是创建,阅读和删除会话。如果我可以让Redis删除过期的会话,那么很棒,但不是必需的。作为Redis的菜鸟,我有一些阅读要做,但有Redis经验的人可以给我任何关于正确实现这一目标的指导,假设Redis是一个不错的选择。 BTW我在Mono平台上,到目前为止已经选择了StackExchange.Redis客户端,因为在某个阶段我会想要集群Redis。我愿意改变这一选择。
答案 0 :(得分: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中),这可能非常有用。