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();
}
예, 정렬/재주문 할 수 있습니다. Hashset은 여전히 권한 개체 집합입니다. 캐시 키 - 해시 코드는 어떻게 생성합니까? – EagerToLearn
@EagerToLearn이 전략은 일반 사용자의 권한 (총계)에 달려 있다고 생각합니다. 몇 백 ~ 몇백? – hangy