Idea de caché multinivel (para programación gpt)

prefacio


He visto la implementación de caché multinivel del marco Youzan TMC antes y escribí un artículo: Consulte el principio del marco Youzan TMC para implementar el caché multinivel simplemente . Todavía no he aprendido algo de su esencia. Hoy , aprenderé más al respecto con la ayuda del JetCache de código abierto de Ali.

¿Qué es la memoria caché multinivel?


Háblame de gpt~ Esta configuración de desarrollo es un buen asistente, filtrará el contenido con más cuidado, a diferencia de cierto motor de grado que lanza directamente un montón de blogs, muchos de ellos aún son ambiguos, y la clave son los anuncios, jaja ~

imagen.png

Su análisis es muy detallado.La velocidad del tipo de memoria es muy rápida, pero no puede compartir recursos.La velocidad de la caché distribuida es más lenta que la anterior, pero puede garantizar la consistencia de los datos del entorno distribuido.La persistencia es generalmente el tipo de relación de mysql, y su característica es capacidad.Grande, pero la desventaja es que el rendimiento bajará cuando la concurrencia supere los 200.

Escenarios de aplicaciones de caché de varios niveles

Generalmente usamos redis de caché distribuido en nuestras aplicaciones. ¿Cuáles son sus deficiencias? También es vulnerable. Preguntas comunes de la entrevista: falla del caché, penetración del caché, estos escenarios también bloquearán el sistema y las teclas de acceso rápido también nodos, lo que afecta el rendimiento de lectura de redis y, por lo tanto, entra en juego el almacenamiento en caché de varios niveles.

Idea de caché multinivel


Lógica de lectura y escritura

lógica de almacenamiento de datos

Caché multinivel

imagen.png

imagen.png

El valor se inserta en un bucle. La capa superior es la caché local, y luego la caché distribuida. Entre ellas está CompletableFuture, que está regulada por thenCombine. Por ejemplo, si la caché local es inconsistente con la caché distribuida, un mensaje de excepción Será devuelto.

imagen.png

lógica de lectura de datos

imagen.png

El pedido todavía se lee de local a distribuido.

checkResultAndFillUpperCache(key, i, holder);
复制代码

Este código es para actualizar a la fuerza el TTL en el interior, lo que garantiza que la memoria caché interna sea consistente dentro del tiempo ttl.

garantía de consistencia

La consistencia aquí tiene varios aspectos: consistencia de caché multinivel, consistencia de diferentes nodos

¿Cómo garantiza la coherencia el almacenamiento en caché multinivel? Ven a gpt estudiantes a responder

imagen.png

¿Cuál es la estrategia de actualización de lectura y escritura? La estrategia de actualización de omisión es la misma que redis, es decir, cuando se obtiene get, si no hay caché de niveles múltiples, entonces el caché de niveles múltiples actualizado después de leer desde db resuelve el primer problema: la coherencia de caché de niveles múltiples.

El segundo problema: la coherencia de los diferentes nodos en realidad se resuelve mediante la publicación y suscripción de redis, es decir, las operaciones de colocación y eliminación de la clave de caché se notificarán a través de la canalización de redis, y luego se sincronizarán los diferentes nodos. Qué hacer si hay un retraso en la puerta de enlace, inténtelo de nuevo~

desglose de caché


Venga a los estudiantes de gpt para responder la pregunta nuevamente.

imagen.png

Debo decir que la inteligencia artificial es realmente inteligente, enumera muchos puntos y luego filtramos artificialmente lo que queremos.

El primer punto menciona que los bloqueos distribuidos se usarán para evitar la falla del caché. ¿Qué significa? Por ejemplo, si hay 2 nodos y 1w de concurrencia, entonces no hay datos en el caché multinivel. En este momento, el nodo 1 obtendrá los datos de actualización de bloqueo distribuido, otras solicitudes se atascarán primero y, una vez completada la actualización, el nodo 2 actualizará sus propios datos, por lo que incluso si la concurrencia es alta, de hecho, solo 2 solicitudes llegarán a la base de datos.

¿Cómo esperar otras solicitudes? Consulte Descarga de conteo de cercas .

Cómo monitorear las teclas del punto de acceso


estudiantes gpt:

imagen.png

public class HotKeyMonitor<K> implements CacheMonitor<K, Integer> {  
  
    private static final Logger logger = LoggerFactory.getLogger(HotKeyMonitor.class);  
  
    private final Map<K, AtomicInteger> counterMap = new ConcurrentHashMap<>();  
  
    private final Set<K> hotKeySet = new HashSet<>();  
  
    private final int threshold;  
  
    public HotKeyMonitor(int threshold) {  
        this.threshold = threshold;  
    }  
  
    @Override  
    public void onGet(String cacheName, K key, Integer value) {  
        if (value == null) {  
            return;  
        }  
        AtomicInteger counter = counterMap.computeIfAbsent(key, k -> new AtomicInteger());  
        if (counter.incrementAndGet() >= threshold) {  
            synchronized (hotKeySet) {  
                if (!hotKeySet.contains(key)) {  
                    hotKeySet.add(key);  
                    ![]()logger.info("Hot key detected, cache: {}, key: {}, count: {}", cacheName, key, counter.get());  
                }  
            }  
        }  
    }  
  
    @Override  
    public void onPut(String cacheName, K key, Integer value) {  
        counterMap.remove(key);  
        synchronized (hotKeySet) {  
            hotKeySet.remove(key);  
        }  
    }  
  
    public Set<K> getHotKeySet() {  
        synchronized (hotKeySet) {  
            return new HashSet<>(hotKeySet);  
        }  
    }  
  
}  
复制代码

imagen.png

¿Cómo se actualiza este valor?

imagen.png

¿Se sincronizará este monitoreo en el clúster?

imagen.png

¿De qué manera lo monitorea?

imagen.png

La solicitud onGet se acumulará y onPut eliminará la tecla de acceso rápido a través del evento de forma asíncrona

Después de monitorear la clave del punto de acceso, en realidad se debe colocar en el caché local para acceder a ella, que es lo más eficiente y evita las solicitudes de red Redis, especialmente el problema de la clave grande .

Resumir


Aquí comenzamos desde el concepto de caché multinivel hasta por qué usamos caché multinivel, y luego desde su lógica de lectura y escritura, garantía de consistencia, desglose de caché, monitoreo de teclas de acceso rápido, tenemos una comprensión integral de caché multinivel I entiendo, gracias a la respuesta de chatgpt, y también leí el código fuente correspondiente, espero que sea útil para los lectores ~

Este artículo participa en el Programa de apoyo al creador de inteligencia artificial.

Supongo que te gusta

Origin juejin.im/post/7215452609103855676
Recomendado
Clasificación