示例#1
0
        public async Task FlushToSql(string connectionString)
        {
            var database = _redisCache.GetDatabase(RedisDatabases.UserTotalVisits);
            var hosts    = await _hostCache.GetListOfHostAsync();

            foreach (var item in hosts)
            {
                var allkeys = await database.HashGetAllAsync(item.Id.ToString());

                if (allkeys.Count() != 0)
                {
                    foreach (var keyItem in allkeys)
                    {
                        if (keyItem.Value != 0)
                        {
                            var date     = keyItem.Name.ToString().Split("_").Select(c => int.Parse(c)).ToArray();
                            var datetime = new DateTime(date[0], date[1], date[2]);
                            var counter  = keyItem.Value;
                            using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                            {
                                using (SqlCommand sqlCommand = new SqlCommand("UpdateTotalVisit", sqlConnection))
                                {
                                    sqlCommand.CommandType = CommandType.StoredProcedure;
                                    sqlCommand.Parameters.AddWithValue("@HostId", item.Id);
                                    sqlCommand.Parameters.AddWithValue("@Date", datetime);
                                    sqlCommand.Parameters.AddWithValue("@Count", (int)counter);
                                    await sqlConnection.OpenAsync();

                                    await sqlCommand.ExecuteNonQueryAsync();

                                    sqlConnection.Close();
                                    await database.HashDecrementAsync(item.Id.ToString(), keyItem.Name, (double)counter);
                                }
                            }
                        }
                    }
                }
            }
        }