Empiece a realizar un seguimiento de su progreso
Inicio de Trailhead
Inicio de Trailhead

Utilizar la caché de la sesión y la organización

Objetivos de aprendizaje

Después de completar esta unidad, podrá:
  • Crear una partición.
  • Almacenar y recuperar valores en la caché de la sesión y la organización.
  • Describir por cuánto tiempo se conservan los valores en la caché.
  • Gestionar los errores de caché.
  • Leer la caché de la sesión desde una página de Visualforce.

Crear una partición

Nota

Nota

¿Todavía no dispone de prueba de caché? Para esta unidad, necesitará una prueba de Caché de plataforma activa. Solicite una prueba siguiendo las instrucciones de la unidad anterior. Si no dispone de prueba de caché, podrá realizar los pasos que se describen en esta unidad, pero sus datos no se encontrarán en la caché.

Para utilizar la Caché de plataforma, configure primero al menos una partición. Tras configurar las particiones, podrá agregar y quitar datos de estas, así como acceder a ellos, mediante la API de Apex de caché de plataforma.

Cada partición tiene una caché de sesión y un segmento de caché de organización. Puede asignar una capacidad distinta a cada segmento. Normalmente, se asignan al menos 5 MB a la partición. Para este ejemplo, no vamos a asignar ningún espacio para asegurarnos de que el código pueda gestionar correctamente los errores de caché. Cuando no se asigna ningún espacio, la tasa de error de caché es del 100%, lo que significa que no se encuentran los valores de caché y que el método get() devuelve null. Utilice esta técnica para probar los errores de caché. En una sección posterior veremos cómo gestionar los errores de caché.

Para comenzar, crearemos una partición desde la página Caché de plataforma (disponible solo en Salesforce Classic).

  1. En Configuración, ingrese Caché de plataforma en el cuadro Búsqueda rápida y, a continuación, seleccione Caché de plataforma.
  2. Haga clic en Nueva partición de caché de plataforma.
  3. Asigne un nombre a la partición (como, por ejemplo, el nombre de su aplicación).
  4. Active la opción Partición predeterminada.
  5. Ingrese 0 para la caché de sesión y 0 para la caché de la organización. A continuación, haga clic en Guardar.

    Crear una partición.

Formato del nombre de clave de caché

Todas las claves de caché tienen el formato siguiente:

Namespace.Partition.Key

Namespace es el nombre del espacio de nombres de la organización en la que se ejecuta la aplicación, que también puede configurarse con el nombre especial “local”. El nombre “local” hace referencia al espacio de nombres de su organización independientemente de si se definió un espacio de nombres en la organización o no.

Partition es el nombre de la partición que creó. En este ejemplo, es CurrencyCache.

Key es el nombre de la clave que utilizó para almacenar un valor. El nombre de clave representa de manera única el valor que se almacenó en caché.

Supongamos que queremos almacenar el tipo de cambio de divisa de dólar de EE. UU. a Euro. Podemos crear una clave con el nombre DollarToEuroRate. Para la partición que acabamos de crear, el nombre completo de la clave sería:

local.CurrencyCache.DollarToEuroRate

Por ejemplo, este fragmento de código almacena un valor en la caché de la organización para la clave DollarToEuroRate.

Cache.Org.put('local.CurrencyCache.DollarToEuroRate', '0.91');

La partición que se creó es una partición predeterminada, por lo que es posible omitir el nombre de partición y el espacio de nombres y especificar solo el nombre de la clave.

DollarToEuroRate

Cuando utilice una partición predeterminada, puede acortar la llamada put() a lo que se indica a continuación.

Cache.Org.put('DollarToEuroRate', '0.91');

Almacenar y recuperar datos en una caché de organización

Ya terminó de configurar las particiones, que es el único paso que se realiza en la interfaz del usuario. Ahora, cambiaremos a Apex para gestionar la caché. Utilice la caché de la organización para almacenar los datos que están disponibles para todos los usuarios de la organización. Utilice los métodos de clase Cache.Org, o bien utilice la clase Cache.OrgPartition para hacer referencia a una partición específica. A continuación, realice una llamada a los métodos de caché de dicha partición.

El siguiente fragmento de código de Apex muestra cómo obtener acceso a una partición mediante la clase Cache.OrgPartition para almacenar y recuperar un valor de caché para una aplicación de tipos de cambio de divisas. Dicho fragmento obtiene la partición con el nombre CurrencyCache en el espacio de nombres local. Asimismo, se agrega un nuevo valor con la clave DollarToEuroRate y el tipo de cambio de divisa de hoy. A continuación, se recupera de la caché el valor para la clave DollarToEuroRate.

// Get partition
Cache.OrgPartition orgPart = Cache.Org.getPartition('local.CurrencyCache');

// Add cache value to the partition. Usually, the value is obtained from a 
// callout, but hardcoding it in this example for simplicity.
orgPart.put('DollarToEuroRate', '0.91');

// Retrieve cache value from the partition
String cachedRate = (String)orgPart.get('DollarToEuroRate');

Si va a gestionar valores de caché solo en una partición, utilice los métodos Cache.OrgPartition. Los métodos Cache.OrgPartition son más fáciles de utilizar que los métodos Cache.Org porque se especifican el espacio de nombres y el prefijo de partición solo una vez al crear el objeto de partición.

¿Los valores que se almacenaron en caché son para siempre?

En el ejemplo anterior se da por sentado que todo funciona correctamente:

  • La Caché de plataforma se activa y tiene una partición con espacio disponible.
  • El valor almacenado en la caché se encuentra en la caché.
  • El valor se almacena correctamente en la caché.

Sin embargo, en la vida real, los datos almacenados en la caché no siempre están garantizados. La Caché de plataforma funciona como un espacio temporal. Por ejemplo, es posible que la caché haya caducado. Incluso si la caché sigue activa, es posible que los datos que se almacenaron en la caché se hayan desalojado. Al igual que las ardillas vacían sus abazones para poder guardar más bellotas, la Caché de plataforma también borra espacio para poder almacenar más datos. Cuando se supera el límite de la partición, Salesforce desaloja los datos que se almacenaron en la caché en función del algoritmo de utilización más reciente (LRU). El desalojo de la caché se efectúa hasta que la capacidad de utilización sea inferior o igual al 100%. Además, si supera el límite de la caché local, los elementos pueden desalojarse de la caché local antes de realizar la solicitud.

Caducidad y duración de los datos que se almacenaron en la caché

El tiempo durante el que los datos se conservan en la caché se denomina valor de periodo de vida (ttlsecs). El valor de periodo de vida se especifica cuando se almacena un par de clave-valor en la caché mediante métodos Apex. Para la caché de sesión, los datos pueden permanecer en la caché hasta 8 horas. Para la caché de la organización, los datos pueden permanecer en la caché hasta 48 horas. De manera predeterminada, el periodo de vida de la caché de la organización es de 24 horas.

La caché de sesión caduca cuando se alcanza el periodo de vida o cuando caduca la sesión del usuario, lo que ocurra primero. La caché de la organización caduca cuando se alcanza el periodo de vida que se especificó.

Mejores prácticas para gestionar los errores de caché

Como mejor práctica, su código debe anticiparse y hacer frente a los puntos de fallo. En otras palabras, suponga siempre que un error de caché es algo que puede suceder. Un error de caché se da cuando solicita un valor de clave de la caché pero dicho valor no se encuentra. El valor que devuelve su llamada get() es nulo. Compruebe el resultado nulo de la llamada get() y gestiónelo según proceda. Por ejemplo, si el resultado es null, consiga el valor de la base de datos o mediante una llamada de API.

El siguiente fragmento de código Apex muestra cómo gestionar un error de caché comprobando si el valor que devolvió la caché no es null (if (cachedRate != null)). Si el valor no es null, podrá utilizar el valor, por ejemplo, para mostrarlo en una página. De lo contrario, recupere este valor de otra fuente, como, por ejemplo, una llamada de API o desde Salesforce.

Cache.OrgPartition orgPart = Cache.Org.getPartition('local.CurrencyCache');
String cachedRate = (String)orgPart.get('DollarToEuroRate');
// Check the cache value that the get() call returned.
if (cachedRate != null) {
    // Display this exchange rate   
} else {
    // We have a cache miss, so fetch the value from the source.
    // Call an API to get the exchange rate.
}

Almacenar y recuperar datos en una caché de sesión

¿Recuerda las acciones que realiza la caché de sesión? ¡Correcto! Almacena los datos vinculados a las sesiones de usuarios individuales. Por ejemplo, puede utilizar la caché de sesión en una aplicación para almacenar la divisa favorita de un usuario o el orden personalizado de la ficha de navegación de un usuario. Con la caché de sesión, podrá gestionar los valores de caché en Apex y leer los valores que almacenó en caché con una variable global de Visualforce.

Cuando se utiliza Apex, la caché de sesión se gestiona de un modo similar a la caché de la organización, con la diferencia de que los nombres de clase son distintos. Utilice las clases Cache.Session y Cache.SessionPartition para obtener acceso a los valores que se almacenaron en la caché de sesión. Para gestionar los valores de cualquier partición, utilice los métodos de la clase Cache.Session. Si va a gestionar valores de caché solo de una partición, utilice los métodos Cache.SessionPartition. Los métodos Cache.SessionPartition son más fáciles de utilizar que los métodos Cache.Session porque se especifican el espacio de nombres y el prefijo de partición solo una vez al crear el objeto de partición.

El siguiente fragmento de código Apex muestra cómo obtener acceso a una partición para almacenar y recuperar un valor que se almacenó en la caché. Dicho fragmento obtiene la partición con el nombre CurrencyCache en el espacio de nombres local. Asimismo, se agrega un nuevo valor con la clave FavoriteCurrency. El valor de la clave FavoriteCurrency se recupera. La clave FavoriteCurrency almacena la divisa favorita del usuario, por lo que este valor es distinto para cada usuario y, por lo tanto, un buen candidato para la caché de sesión.

// Get partition
Cache.SessionPartition sessionPart = Cache.Session.getPartition('local.CurrencyCache');

// Add cache value to the partition
sessionPart.put('FavoriteCurrency', 'JPY');

// Retrieve cache value from the partition
String cachedRate = (String)sessionPart.get('FavoriteCurrency');

Acceder a la caché de plataforma con variables globales de Visualforce

Puede acceder a los valores en caché que se almacenaron en la caché de plataforma desde una página de Visualforce utilizando las variables globales $Cache.Session o $Cache.Org. Al utilizar estas variables globales, podrá leer los valores en caché que se almacenaron con Apex directamente desde su página de Visualforce.

Nota

Nota

Los ejemplos siguientes muestran cómo acceder a la caché de sesión mediante la variable global $Cache.Session. Los ejemplos equivalentes a la caché de la organización son iguales salvo por la diferencia de que se utiliza la variable global $Cache.Org.

Cuando utilice la variable global $Cache.Session, cualifique completamente el nombre de la clave con el nombre de la partición y del espacio de nombres. Este ejemplo es un componente de texto de salida que recupera un valor en caché del espacio de nombres ExPro, la partición CurrencyCache y la clave FavoriteCurrencyRate.

<apex:outputText value="{!$Cache.Session.ExPro.CurrencyCache.FavoriteCurrencyRate}"/>

A diferencia de lo que sucede con los métodos de Apex, no es posible omitir el prefijo namespace.partition para hacer referencia a la partición predeterminada de la organización. Si no se definió ningún espacio de nombres para la organización, utilice local para hacer referencia al espacio de nombres de la organización actual donde se ejecute el código.

<apex:outputText value="{!$Cache.Session.local.MyPartition.Key}"/>

Si el valor en caché es una estructura de datos que tiene propiedades o métodos, como, por ejemplo, una lista de Apex o una clase personalizada, acceda a dichas propiedades en la expresión $Cache.Session utilizando una notación de puntos. Por ejemplo, este marcado invoca el método Apex List.size() si el valor de numbersList se declara como lista.

<apex:outputText value="{!$Cache.Session.local.MyPartition.numbersList.size}"/>

Este ejemplo proporciona acceso a la propiedad del valor del valor en caché myData que se declara como clase personalizada.

<apex:outputText value="{!$Cache.Session.local.MyPartition.myData.value}"/>

Asignación de caché protegida para aplicaciones de ISV

Con la caché de plataforma, las aplicaciones de ISV se ejecutan con mayor rapidez y ofrecen mejor desempeño. Si es usted un desarrollador de ISV, puede garantizar el espacio de caché para sus aplicaciones adquiriendo espacio de caché para su propio espacio de nombres. De este modo, cuando su aplicación se instale en una organización de suscriptor, el espacio para la caché de su aplicación no se verá afectado por la utilización de la caché de la organización del suscriptor. Solo el código Apex que se ejecute desde el espacio de nombres de su aplicación puede acceder y utilizar la caché de su espacio de nombres. Ningún otro código de la organización de suscriptor puede utilizar esta caché. Puede probar su aplicación con la caché de su espacio de nombres y asegurarse de que la asignación de caché estará protegida en todas las organizaciones de suscriptor.

Las particiones de caché se distribuyen a los suscriptores como parte del paquete de la aplicación. Agregue una o varias particiones de caché a su espacio de nombres para su paquete como componentes de la misma manera que agrega otros componentes. Las particiones de caché no se agregan automáticamente como componentes dependientes.

Lista de componentes de paquete que incluyen una partición de caché.
Nota

Nota

Consulte la información siguiente acerca de las particiones predefinidas.

  • Las particiones que se agreguen al paquete deben ser particiones no predeterminadas.
  • Cuando un suscriptor instala su paquete, las particiones de caché se instalan en su organización, lo que permite que su aplicación acceda a las particiones de caché instalada para su espacio de nombres.
  • Los suscriptores deben disponer de una organización Enterprise Edition o Unlimited Edition, o bien deben haber adquirido la Caché de plataforma.

El diagrama siguiente muestra un ejemplo de capacidad de caché de una organización de suscriptor Enterprise Edition en la que se instaló un paquete con caché empaquetada. La capacidad total de caché del suscriptor de 30 MB se divide en tres particiones que combinan las cachés de organización y de sesión. La capacidad de la caché empaquetada se origina en el paquete instalado de la organización de suscriptor y contiene dos particiones. La caché empaquetada incluye 20 MB de caché que el ISV adquirió. (Recuerde que solo el código Apex del paquete puede acceder a la caché empaquetada y que el código de la organización de suscriptor no puede utilizar dicha caché.)

La capacidad de caché de las particiones empaquetadas y las particiones de la organización son distintas.

Adquiera la caché de su espacio de nombres mediante la aplicación Pedido de canal. Puede adquirir caché en bloques de 10 MB. Para determinar la cantidad de espacio de caché que necesitan sus aplicaciones, pruebe sus aplicaciones con sus particiones de caché. Utilice la caché de prueba para incrementar la capacidad de la caché de su organización. Tal como se mencionó en la primera unidad, hay determinadas versiones de organizaciones de suscriptor que tienen una asignación de caché de manera predeterminada. Puede solicitar 10 MB de caché de prueba para la organización Developer Edition en la que desarrolla aplicaciones. Puede solicitar incrementar la cantidad de caché de prueba que se otorga a su organización haciendo contacto con Salesforce. Al probar con diferentes tamaños de caché, podrá hacerse una idea del espacio de caché que debe adquirir para su propio espacio de nombres.

Ahora que ya sabe cómo obtener y almacenar valores en la Caché de plataforma, es el momento de probar por su cuenta. Complete el desafío siguiente para poner a prueba sus conocimientos.

Recursos

Recursos de la Guía del desarrollador de APEX:

Recursos de la Ayuda de Salesforce: Cache Lightning Platform Data

Nota

Nota

Recuerde, este módulo está pensado para Salesforce Classic. Cuando inicie su organización para realizar prácticas, cambie a Salesforce Classic para completar este reto.