private void DoUpdateChangeKey(RedisClient client, string setId, object keyByte, byte[] values, bool isHash, byte[] buffer) { string key = isHash ? Encoding.UTF8.GetString((byte[])keyByte) : keyByte.ToString(); dynamic entity = null; try { entity = CovertEntityObject(key, values); CacheType cacheType = CacheType.None; if (entity != null) { SchemaTable schema; Type entityType = entity.GetType(); if (!EntitySchemaSet.TryGet(entityType, out schema)) { EntitySchemaSet.InitSchema(entityType); } if (schema != null || EntitySchemaSet.TryGet(entityType, out schema)) { cacheType = schema.CacheType; } if (cacheType != CacheType.None) { string redisKey = cacheType == CacheType.Dictionary ? key.Split('|')[0] : key.Split('_')[0]; using (IDataSender sender = DataSyncManager.GetRedisSender(schema, redisKey)) { sender.Send(entity); } } } } catch (Exception ex) { TraceLog.WriteError("ChangeKey:{0} error:{1}", key, ex); } if (isHash) { client.HDel(setId, (byte[])keyByte); } else { client.ZRem(setId, buffer); } if (entity != null) { Type type = entity.GetType(); string entityKey = string.Format("{0},{1}", key, type.Assembly.GetName().Name); client.HSet("__GLOBAL_SQL_CHANGE_KEYS_NEW", Encoding.UTF8.GetBytes(entityKey), new byte[] { 1 }); } }
private bool DoWriteToDb(RedisClient redisClient, byte[] buffer) { SqlStatement statement = null; try { statement = ProtoBufUtils.Deserialize<SqlStatement>(buffer); if (statement != null) { var dbProvider = DbConnectionProvider.CreateDbProvider("", statement.ProviderType, statement.ConnectionString); if (dbProvider != null) { var paramList = ConvertParam(dbProvider, statement.Params); dbProvider.ExecuteQuery(statement.CommandType, statement.CommandText, paramList); redisClient.ZRem(_setId, buffer); return true; } } _errorCount++; return false; } catch (Exception ex) { _errorCount++; try { if (removeCheckBox.Checked) { redisClient.ZRem(_setId, buffer); } } catch { } if (statement != null) { try { msgListBox.Items.Add(string.Format("pos:{0}, error:{1}", _currentIndex, ex.Message)); TraceLog.WriteError("WriteToDb:{0}\r\n{1}\r\nParam:{2}", ex.Message, statement.CommandText, GetParamToString(statement.Params)); } catch { } } return false; } }