sql >> データベース >  >> NoSQL >> Redis

Redisからのデータをマッピングする効率的な方法

    遅延読み込みを使用できるため、Roles コレクションは、必要な場合にのみロードされます。これは、FullEmployeeに役割リポジトリを挿入することによって行われます。 エンティティ。

    また、すべてのロールを1回ロードすることもできます。FullEmployeeMapperにロールのディクショナリを保持します。 ロードされたときにそれを埋め、キャッシュを照会する前にチェックします。うまくいけば、作業単位ごとにインスタンスを再作成して、新しい作業ごとに辞書が新しくなり、マルチスレッドの問題を回避できるようにします。

    Listを使用したサンプル実装 :

    class FullEmployeeMapper : IMapToNew<Employee, FullEmployee>
    {
        private List<FullRole> _roles = new List<FullRole>();
        public FullEmployee Map(Employee source)
        {
            FullEmployee employee = new FullEmployee()
            {
                Id = source.Id,
                Age = source.Age,
                BirthDate = source.BirthDate,
                Name = source.Name
            };
    
            var mapper = new FullRoleMapper();
            var client = new RedisClient("localhost");
    
            employee.Roles = _roles.Where(r => source.Roles.Contains(r.Id)).ToList();
            if (employee.Roles.Count != source.Roles.Count)
            {
                var newRoles = client
                    .As<Role>()
                    .GetByIds(source.Roles.Except(employee.Roles.Select(r => r.Id)))
                    .Select(r => mapper.Map(r)))
                    .ToList();
                employee.Roles.AddRange(newRoles);
                _roles.AddRange(newRoles);
            }
            return employee;
        }
    }
    


    1. Redisを使用して、限られた範囲から一意のIDを生成します

    2. マングーススキーマ参照と未定義のタイプ'ObjectID'

    3. Redisを使用したマルチパラメーターマッチファインダー

    4. 独自のAzureアカウントを持参–ScaleGridでのMongoDB®およびRedis™のホスティング