--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
public static UsuarioPortal ObtenerInfoUserPortal(string sUsuario)
{
var usu = DAL.SeguridadPortal.DevUsuarioPortal(sUsuario);var tienePermiso = ObtenerPermisoAsesor();
usu.TienePermisoAsesor = tienePermiso;
usu.TienePermisoABC = ObtenerPermisoABC_Llamando_a_WcfService(sUsuario);
return usu;
}Gracias Carlos! Desde mi desconocimiento, por qué (argumentos) mejor usar Session que HttpContext.Current.Cache ?
No sé porqué me comentaron de evitar utilizar la Session, aunque en esta aplicación Legacy se ha utilizado para paginación de GridView (List<T>) y otras cosas.
HttpContext.Current.Cache no es recomendable?
HttpContext.Current.Cache.Add(sUsuario, usu, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, Settings.Default.MinutosCacheUsuarioContexto, 0), CacheItemPriority.NotRemovable, null);
Puntos críticos...tendría que analizarlo bien.
Utilizan la aplicación unos 800 usuarios.
En la autenticación se hacen muchas consultas para obtener datos del usuario "logado". Aparte del sitemap, también para presentar algunas opciones del menú y controles en la página (Visible true o false) hay que comprobar ciertos permisos específicos.
Estos permisos:
1.) realizan alguna consulta SQL a la base de datos
2.) realzian llamada a un WCF Service externo.
Gracias Juan! Grandiosa tu respuesta, sobre todo, basado en una experiencia real de sitio con mucho tráfico, y ahí se ven esos conocimientos dónde atajar los "cuellos de botella".
La clase Profiler es como un StopWatch ?
Profiler.Start();
int count = Profiler.Stop();
Yo me pierdo en todos los detalles, veo que aparte de Redis, ElasticCache de Amazon, Memcached, y también aplica el AppFabric Caché de Microsoft (algo había leido).
mongodb también tiene dicha funcionalidad, o va en combinación con Redis?
Concluyo que StackExchange.Redis es la recomendación en .NET, y para llegar a máximo rendimiento y escalabilidad con Redis (y con mongodb, ElasticCache, ...) mejor montarlo con Linux. Aquí en la empresa lo haríamos en Windows si se deciden a ello.
Leo, si el ruido es de proyectos y experiencias reales de unos cracks como vosotros, parafrasenado a sr.Rajoy, viva el ruido !!! ElasticCache de Amazon tiene driver de C# (y en Windows), a día de hoy, cuál sería el recomendado?
Pensando en voz alta desde mi torpeza, no sé si habrá clase CacheHelper que se abstraiga si se utiliza HttpCurrent.Cache, o Redis, o AppFabric...sobre todo, pensando en control de errores, si no existe servidorRedis o está caído o errores Timeout, que utilice HttpCurrent.Cache
Gracias de corazón con los comentarios!
Saludos gente!
Carlos
El sábado, 8 de agosto de 2015, 17:01:48 (UTC+2), Leonardo Micheloni escribió:Excelente información, gracias Juan!
De: juan ladetto
Enviado el: 08/08/2015 11:30
Para: altnet-...@googlegroups.com
Asunto: Re: [altnet-hispano] Buenas prácticas de Caching en ASP.NET 4.5.1 - Hacia escalabilidad y alto rendimiento - performanceLeo/resto.memcached actualmente es más lento que redis y ofrece menos posibilidades de escalamiento. Elasticcache ahora soporta redis como opción.Redis/mongodb no tienen la misma performance sobre linux que sobre windows, Mongodb utiliza memory mapped files y redis utiliza algo muy similar (esto lo hace a nivel OS y sobre windows no es tan performante como sobre linux).Abzs2015-08-07 19:52 GMT-03:00 Leonardo Micheloni <leonardogabr...@gmail.com>:Solo para meter ruido: nosotros hemos usado ElasticCache de Amazon (es casi un memcached), eso sí, para Windows no te lo recomiendo, funciona, pero al menos cuando lo hicimos (hace dos años) era pésimo el rendimiento en comparación con Linux, pero servía para desarrollar en Windows y desplegar en Amazon, también tuvimos que tocar el driver de C# porque tenía algún bug (poco alentador mi consejo como verás) pero bueno, una vez que funcionó quedó de pelos, al día de hoy sigue funcionando.
--
private static ConnectionMultiplexer connectionMultiplexer; private static IDatabase database;
y se configura así:private static void Configure() { //use locally redis installation var connectionString = string.Format("{0}:{1}", "127.0.0.1", 6379); //use azure redis installation var azureConnectionString = string.Format("{0}:{1},ssl=true,password={2}", "imperugo-test.redis.cache.windows.net", 6380, "Azure Primary Key"); connectionMultiplexer = ConnectionMultiplexer.Connect(connectionString); database = connectionMultiplexer.GetDatabase(); }
El tema de variables static y aplicaciones Web hay que tener cuidado, y en cuanto a rendimiento y escalabilidad no sé si es buena práctica mantener una conexión static a Redis. Vamos no veo el patrón de implementación a seguir Redis + App. Web. No lo veo igual que una aplicación de consola (.exe).