Действительно ли Memcached является взаимозаменяемым Сервером состояния ASP.NET?

Я вижу здесь ошибку:

email: new FormControl(null, [Validators.required, Validators.email, this.UsedEmails.bind(this)])

Вы предоставляете валидаторы синхронизации и валидатор асинхронности в одном массиве. Но асинхронные валидаторы должны использоваться в качестве третьего параметра в FormControl:

 email: new FormControl(null, [Validators.required, Validators.email], this.UsedEmails.bind(this))

Я также рекомендую использовать наблюдаемые вместо обещания, а также использовать formBuilder. Например:

 constructor(
    private fb: FormBuilder,
  ) {}

  ngOnInit() {
    this.myForm = this.fb.group({
      name: ['', Validators.required],
      email: [
        '',
        [Validators.required, Validators.email],
        this.validateEmailNotTaken.bind(this)
      ]
    });
  }




  validateEmailNotTaken(control: AbstractControl): Observable {
          // check if email exists
  }
5
задан baretta 14 November 2008 в 18:34
поделиться

3 ответа

Memcached не поддерживает данные, зеркально отражающие в настоящее время, он только обеспечивает способность разделить Ваши записи через серверы кратных чисел, чтобы попытаться препятствовать один то, чтобы быть затопляемым. Это работает или хешированием Вашего ключа с адресом сервера, или при помощи последовательного алгоритма хеширования (libketama).

В целом, хотя, Memcached не должен быть просмотрен как персистентный уровень хранения, и почти во всех случаях, данные в кэше должны совпасть с в базе данных. Если Вы вносите изменение в данные сессии пользователя и хотите кэшироваться, это, для обновления его в Memcached, то обновляет его в базе данных сразу позже. Если Вы хотите быть действительно осторожными, Вы могли бы реализовать простую систему журналирования, чтобы удостовериться, что эти данные остаются последовательными в случае системного отказа.

Memcached определенно используется для кэширования сессий, хотя, говорит создатель так же в Статье в журнале Jinux. Это действительно только предназначено для оптимизации операций чтения, в конце дня, любые данные, о которых Вы заботитесь, должны храниться в базе данных.

1
ответ дан 14 December 2019 в 19:29
поделиться

В идеальной ситуации данные сессии являются только единственным значением, внутренним числовым представлением идентификатора пользователя. Это означает, что пользователь передал страницу входа в систему успешно с обеспечением правильного пароли.

Но что относительно других как, возьмите stackoverflow, например, динамические данные на странице в зависимости от пользователя: псевдоним пользователя, числа репутации, заработанные значки, permssion для отъезда комментария. Они часто - результат нескольких СОЕДИНЕНИЙ через несколько таблиц базы данных.

Если Вы не помещаете memcached используемый, эти запросы почти всегда считывают данные с диска, который является очень медленным, не очень масштабируемой операцией. Кэш в базе данных? Что Вы думаете, что процент совпадений полагал бы, что база данных делает вещи кроме руководящих данных сессии? Почему необходимо читать из диска, в то время как Вы можете из памяти?

Конечно, любые записи к информации о соответствующем пользователе должны делать недействительным соответствующую сессию в memcached.

0
ответ дан 14 December 2019 в 19:29
поделиться

http://www.codeplex.com/memcachedproviders имеет поставщика состояния сеанса для asp.net, который хранит значения в memcached. Это обеспечивает способность скопировать данные сессии в 'SQL Server. Поскольку yogman сказал, что данные сессии хранятся как одно значение. Если замещение happends, целая сессия для того пользователя проиграна, и пользователь будет направлен к экрану входа в систему. Memcached не выселяет данных перед истечением, если он не исчерпывает пространство для содержания новых данных.

4
ответ дан 14 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: