Redis: Almacenamiento de datos NoSQL clave-valor en memoria

Redis

Redis (REmote DIctionary Server) es un sistema de almacenamiento en memoria volátil en RAM basado en registros clave-valor NoSQL (opcionalmente podemos hacer que sea persistente o durable). También soporta la replicación de datos maestro-esclavo. Actualmente Redis es usado por: TwitterInstagramGitHubFlickr, o Digg.

¿Pero en que casos puede ser necesario un sistema así?

Por ejemplo para el análisis y procesamiento de datos en tiempo real, supongamos que obtenemos muestreos periódicos de un sensor y cada nueva lectura vuelve a calcular un valor basándonos en las lecturas previas, en ese caso un sistema de gestión de base de datos clásico como MySQL realizando transacciones a disco puede no ser muy eficiente comparado con Redis (tiempos de respuesta menores).

Un sistema de comunicaciones basado en mensajería por ejemplo.

Redis incluye clientes para la mayoría de los lenguajes de programación conocidos (PHP y C# entre ellos claro).

Redis está escrito en C y está ideado para sistemas Linux, aún así existe un desarrollo para sistemas MS Windows.

Instalación en Windows

Podemos descargar versiones binarias del instalador del siguiente enlace en GitHub. La versión que he descargado es Redis-x64-3.2.100.zip.

 

 

El paquete apenas ocupa 5MB.  Una vez descomprimido tenemos todos los binarios y utilidades básicas necesarias.

Abrimos una consola DOS y ejecutamos redis-server.exe.

Una vez ejecutado la consola nos muestra información valiosa, se está ejecutando a la escucha en el puerto 6379, para que ejecute el fichero de configuración copiamos el fichero redis.windows.conf a redis.conf y ejecutamos:

C:\> redis-server.exe redis.conf

Redis incluye la utilidad redis-benchmark.exe para poner a prueba su velocidad, simula la ejecución de comandos de forma simultanea desde varios clientes.

Enlaces externos

 

PrestaShop v1.7: Configuración básica

Cambiar la divisa

En la columna izquierda en el panel de administración se encuentran las opciones para configurar los datos del país local donde operemos:

Añadimos una nueva moneda si no está presente la que deseamos (probamos a añadir el peso chileno sin problemas). Para evitarnos problemas solo dejamos habilitadas las monedas que vaya a usar nuestra aplicación. Si probamos ahora a cargar el área cliente ya no se muestra el pequeño desplegable para seleccionar la moneda.

Idioma

International > Localization

 

Hacemos lo mismo, quitamos los idiomas superfluos que no nos interesan. Por alguna razón no me permite dejar sólo habilitado el idioma castellano, cuando trato de deshabilitar el ingles me arroja un error:

Habilitar modo depuración para pruebas

Cuando el tema se nos va de las manos (y te aseguro que a ti también te pasara probando opciones) lo mejor es habilitar modo depuración, en este modo todos los errores de PHP se mostrarán por pantalla, eso nos permite obtener una pista al menos de donde esta “cascando” el código. La opción de emergencia está en “CONFIGURE > Advanced Parameters > Perfomance”.

Por supuesto cuando la Web este habilitada de forma pública lo mejor es quitar esta opción.

Activación multitienda

En algunos casos podemos tener varias tiendas fisicas que queremos asociar a su escaparate virtual, una multitienda tiene un backend de admnistración desde donde controlar todas las tiendas, sin embargo para el cliente cada tienda es un portal diferente con su carrito (comparten cuenta de acceso a su área privada) y cada tienda ingresa sus ganancias en una cuenta ingresos separada.

Primero activamos la opción mutistore en “CONFIGURE > Shop Parameters > General”:

Una vez habilitado podemos ver una opción nueva en parámetros avanzados “Multistore”:

Lo primero es editar el grupo de tiendas:

Para compartir los clientes entre tiendas hay que modificar la tabla clientes ‘ps_customer’ liberando la clave relacional que asocia un cliente a una tienda.

update ps_customer set id_shop=null

Debemos usar estas opciones sólo si estamos seguros, en muchos casos volver atrás ya no será posible.

Productos

Crear un producto nuevo

Catalog > Products: New product.

Cada producto está ordenado por varias pestañas y campos asociados a cada sección.

Configuración básica

  • Añadimos una o varias fotos del producto.
  • Summary: Un breve resumen del producto (podemos formatear el texto e incluso insertar imágenes).
  • Descripción.
  • Añadir características adicionales, algo similar a los atributos de un producto (pero no se comparten entre distintos productos) (enlace PS16).
  • Marca del proveedor del producto.
  • Productos relacionados.

En  la columna derecha podemos definir los siguientes campos:

  • Combinaciones de productos.
  • Código interno de referencia (indispensable para mantener la trazabilidad con otros sistemas como un ERP).
  • Cantidad.
  • Precios y tasas.
  • Categorías: Lo veremos más adelante pero las categorías permiten ordenar nuestros productos a la venta y luego crear menús que agrupen productos a la venta basados en las categorías que los representan.

Por ejemplo en el theme usado en la captura inferior las categorías componen el menú vertical izquierdo (Jewelry, Eelectronics…)

Cantidades

Podemos definir la cantidad de existencias de un producto, una cantidad mínima de stock a partir de la cual estará el producto a la venta o el comportamiento de nuestra tienda cuando no hay stock disponible del producto.

Podemos definir una etiqueta cuando el producto tiene stock o no, incluso la fecha a partir de la que estará disponible.

Envíos

 

 

SEO

Ofrece opciones para posicionamiento de los productos en los buscadores.

Cuando acabamos de configurar el producto debemos acordarnos de activar (pasar de OFFLINE a ONLINE en la parte inferior de la pantalla).

El aspecto final del producto de prueba queda así:

 

PrestaShop: Administración básica del ECommerce

Instalación phpMyAdmin para administrar la BD

Vamos a instalar phpMyAdmin para administrar la base de datos de PrestaShop. phpMyAdmin se instala con APT con el siguiente comando:

$ sudo apt-get install phpmyadmin

Si va bien inmediatamente comienza la instalación guiada paso a paso. En este caso el servidor Web está montado sobre Apache.

En la siguiente pantalla seleccionamos “No” para configurar la BD más adelante.

A pesar de finalizar la instalación correctamente cuando introduzco http://192.168.1.157/phpmyadmin/ no carga correctamente. Edito el fichero de configuración de Apache:

$ sudo vim /etc/apache2/apache2.conf

y añado la siguiente línea al final de mismo:

Include /etc/phpmyadmin/apache.conf

Ahora reinicio el servidor Web:

$ sudo service apache2 restart

Accedemos con los datos de acceso a MySQL  usuario ‘root’ y clave ‘reverse’.

Problemas

Redirección automática a IP antigua

La VM al arrancar de nuevo me ha asignado una nueva dirección de red por DHCP, ahora cuando trato de acceder a Prestashop con la nueva dirección IP automáticamente me redirige a la dirección IP antigua “http://192.168.1.135/prestashop/index.php?”, usando phpMyAdmin vamos a cambiar de la BD prestashop en la tabla ‘ps_configuration’ los valores

Cambiamos a la IP correcta también en la tabla ‘php_shop_url’.

No carga frontend

Durante la instalación de PrestaShop junto con la plantilla (quickinstall) en el mismo instalador el backend de administración funciona correctamente pero cuando trato de acceder como cliente a “http://192.168.1.172/prestashop/” me regiride a otra URL “prestashop/es/” con error 404 (página no encontrada). He tratado de limpiar la cache, he probado con otro navegador, al final “creo” (preocupante) que lo han solucionado las siguientes línea mágicas al final del fichero /etc/apache2/apache.conf:

<Directory /var/www/html/prestashop/>
       Options Indexes FollowSymLinks
       AllowOverride All
</Directory>

 

Acceso backend de administración de PrestaShop

PrestaShop tiene un mecanismo ingenioso para acceder al área de administración y que sea más seguro, durante el proceso de instalación renombra la subcarpeta admin/ dándole un identificador único para cada tienda instalada, en mi caso se ha creado como admin437hist5h/, para acceder al panel de administración entonces:

http://192.168.1.157/prestashop/admin437hist5h/

Instalación de un theme nuevo

Si queremos que nuestra tienda destaque y tenga un aspecto que las diferencie de las demás yo personalmente recomiendo invertir algo de presupuesto en comprar un tema premium. Vamos a aprender como se instala un tema comprado y descargado comprimido, por ejemplo el tema

Con el archivo comprimido en nuestro PC local es super sencillo cargarlo en PrestShop en ‘Preferencias > Temas’ (Cuando instalamos el theme premium se genera una nueva opción de menú en el backend de administración).

Esta es la demo del theme que me he instalado.

Lo mejor es inspeccionar el código fuente de la demo para saber las dimensiones que deben tener las imágenes, en este tema el logo tiene una dimensiones (158×58), debemos respetar estas dimensiones para reemplazarlo por el de nuestro negocio (yo uso GIMP por ejemplo).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Montando una tienda en línea con PrestaShop (I)

Para realizar las primeras pruebas voy a montar una máquina virtual usando VB (Virtual Box) y una imagen de Ubuntu Server 14.04 x86 (username: ubuntu, password: reverse) descargada con torrent de este enlace. Después de hacer un par de ajustes en la configuración de red (cambio de NAT a modo puente) y deshabilitar el controlador USB tengo la VM (Maquina Virtual) arrancada en dos minutos.

Ahora dentro de la VM arrancada voy a instalar LAMP, ejecuto los siguiente comandos (me conecto usando SSH por comodidad):

$ sudo apt-get install lamp-server^

Comienza el proceso de instalación:

Bien! Ya tenemos preparado el servidor Web Apache con MySQL y PHP, podemos probarlo abriendo una URL desde el PC anfritrion, en mi caso con la IP de la VM http://192.168.1.10/:

Ahora nos movemos de la carpeta actual a /var/www/html/ donde se alojan las páginas Web (la que nos ha mostrado es index.html.

Lo siguiente es lo de siempre, creamos un fichero llamado phpinfo.php en /var/www/html/ y añadimos el siguiente contenido (con VIM mi editor querido :-))

<?php

phpinfo();

?>

Si todo va bien ahora vemos la configuración de PHP:

Pasamos a la siguiente fase, instalar PrestaShop, todo lo anterior ha sido para preparar el entorno.

Primero lo descargamos en la VM en /var/www/html del siguiente enlace. En el momento de redactar este post la versión es prestashop_1.6.1.14.zip. Una vez descargado lo descomprimimos con el comando unzip (me he tenido que instalar previamente unzip con sudo apt-get install unzip):

$ sudo unzip prestashop_1.6.1.14.zip

Se crea una carpeta con el contenido en /var/www/html/prestashop.

Para comenzar la instalación desde el PC anfitrión accedemos a http://192.168.1.10/prestashop/.

Si durante el proceso de instalación nos de errores de permiso del estilo ‘Permisos recursivos de escritura para el usuario www-data…‘ probablemente debamos cambiar el propietario de la carpeta de instalación

sudo chown -R www-data prestashop/

$ sudo chmod 0775 prestashop -R

Si arroja algún error de la librería gráfica probablemente se soluciona con:

$ sudo apt-get install php5-gd

Y reiniciamos el servidor con:

$ sudo /etc/init.d/apache2 restart

Ahora ya podemos continuar con la instalación, el siguiente paso es definir información de la tienda.

 

Si accedemos al front office http://192.168.1.135/prestashop/ ya tenemos la tienda montada.

 

 

 

 

 

C# BasicMSMQClient: Ejemplo básico de envío de mensaje a una cola MSMQ

Con el servicio MSMQ arrancado en el PC local Win7 (ver “MSMQ: Microsoft Message Queuing“) vamos a crear una aplicación C# mínima para publicar un mensaje en la cola “test_queue”.

Para  poder usar el espacio de nombres “System.Messaging” y sus clases una vez creado el proyecto debemos añadir la referencia en el explorador de soluciones (CTRL+ALT+L).

Después añadimos el espacio de  nombres “using System.Messaging;” que nos proporciona las clases necesarias para trabajar con MSMQ.

La única clase que vamos a necesitar para un ejemplo mínimo es MessageQueue. Esta clase nos permite acceder a una cola existente o incluso crearla. Al constructor de la case le pasamos una cadena con la ruta de la cola. Cuando una cola es privada como la del ejemplo esta no se pública en los servicios de AD (Active Directory),  una cola privada es para ser empleada solo en el ámbito del PC local (entre dos aplicaciones en el mismo servidor por ejemplo).

El método send manda un mensaje no transaccional con una etiqueta.

Aquí tenéis el ejemplo:

Cada vez que ejecutamos la aplicación un nuevo mensaje se almacena en la cola (gestionar las colas ejecutando con compmgmt.msc).

Podemos abrir cada mensaje para ver sus campos: