1. OutputCache属性にVaryByCustomオプションを使用する必要がありますか?
私はそれが最高のバージョンだと思います。 here on SOまたはin this blogを参照してください。
2.同じ権限セット(異なる順序でハッシュセットに追加される可能性があります)を持つハッシュテーブルのユニークキーを作成するにはどうすればよいですか?
がキャッシュキーを作成するには、私が過去にこれと同様のものを使用している(a GetHashCode実装を使用しています):
public class Permission
{
public Guid Id { get; set; }
public string Name { get; set; }
public override int GetHashCode() { return this.Id.GetHashCode(); }
}
public static string BuildCacheKey(HashSet<Permission> permissions)
{
var hashCode = GetHashCode(permissions);
return string.Format(CultureInfo.InvariantCulture, "permission_{0}", hashCode);
}
private static int GetHashCode(IEnumerable<Permission> permissions)
{
unchecked
{
var hash = 17;
foreach (var permission in permissions.OrderBy(p => p.Id))
{
hash = hash * 23 + permission.GetHashCode();
}
return hash;
}
}
これにはいくつかの権限の私見で動作するはずです。権限の組み合わせが少なく、あまりにも複雑な権限の名前しかない場合は、名前を連結することもできます。
public static string BuildCacheKey(HashSet<Permission> permissions)
{
var builder = new StringBuilder("permission_");
foreach (var permission in permissions.OrderBy(p => p.Name))
{
builder.Append(permission.Name);
}
return builder.ToString();
}
はい、並べ替え/並べ替えができます。ハッシュセットは依然として特権オブジェクトのセットですが、キャッシュキー(Hashcode)を生成するにはどうすればいいですか? – EagerToLearn
@EagerToLearn私は、その戦略は、通常のユーザーが持つ権限の数(合計)によって異なると考えています。数百または数百? – hangy