IT袋

当前位置:主页 > 经验教程 > 建站编程 >

redis三种常用高效缓存读写策略是什么

redis三种常用高效缓存读写策略是什么(2)

时间:2024-03-21 09:46:56 来源:IT袋 作者:马勇
导读:redis三种常用高效缓存读写策略是什么,旁路缓存示例代码 import java.util.HashMap;import java.util.Map;public class CacheAsideExample { // 模拟缓存 private static MapString, String> cache = new HashMap>(); // 模拟数据库或数

redis三种常用高效缓存读写策略是什么

旁路缓存示例代码

import java.util.HashMap;
import java.util.Map;
public class CacheAsideExample {
    // 模拟缓存
    private static Map<String, String> cache = new HashMap<>();
    // 模拟数据库或数据源
    private static Map<String, String> dataSource = new HashMap<>();
    // 从缓存中获取数据
    public static String getDataFromCache(String key) {
        return cache.get(key);
    }
    // 从数据源中获取数据
    public static String getDataFromDataSource(String key) {
        return dataSource.get(key);
    }
    // 将数据存入缓存
    public static void putDataIntoCache(String key, String value) {
        cache.put(key, value);
    }
    // 删除缓存中的数据
    public static void deleteDataFromCache(String key) {
        cache.remove(key);
    }
    // 从数据源中加载数据,并存入缓存
    public static String loadData(String key) {
        String data = getDataFromDataSource(key);
        if (data != null) {
            putDataIntoCache(key, data);
        }
        return data;
    }
    public static void main(String[] args) {
        // 设置数据源
        dataSource.put("key1", "value1");
        dataSource.put("key2", "value2");
        // 从缓存中获取数据,如果不存在则从数据源中加载
        String data1 = getDataFromCache("key1");
        if (data1 == null) {
            data1 = loadData("key1");
        }
        System.out.println("Data1: " + data1);
        // 从缓存中获取数据,如果不存在则从数据源中加载
        String data2 = getDataFromCache("key2");
        if (data2 == null) {
            data2 = loadData("key2");
        }
        System.out.println("Data2: " + data2);
        // 删除缓存中的数据
        deleteDataFromCache("key1");
        // 从缓存中获取数据,如果不存在则从数据源中加载
        String data3 = getDataFromCache("key1");
        if (data3 == null) {
            data3 = loadData("key1");
        }
        System.out.println("Data3: " + data3);
    }
}

读写穿透(Read/Write Through Pattern)

读写穿透策略将 Redis/Memcached 视为数据存储的主要地方,也就是说将缓存充当原本的数据库,利用 Cache 服务负责将数据读取并写入数据库(MySQL、Oracle等)。

写操作流程

1、先查询缓存,缓存不存在,更新数据库

2、缓存存在,先更新缓存,利用 Cache 服务同步更新数据库。

读操作流程

1、从缓存读取数据,读取到返回

2、缓存读取不到,从数据库加载后写入缓存并返回。

和旁路缓存相反,读写穿透,主缓存从数据库。

异步缓存写入(Write Behind Pattern)

只更新缓存,不利用 Cache 服务更新数据库,可以利用消息队列,先存放要消费的信息,然后可以异步批量的更新数据库,一般不使用,但数据库的缓冲池机制是这种策略的一个实现,

相关阅读

  • 网页设计网站制作流程 百度网页的制作过程

    网页设计网站制作流程 百度网页的制作过程

    文章摘要:网页设计网站制作流程和百度网页的制作过程方面的内容,下面来一起了解一下吧。 受互联网的影响使实体店越来越难,为适应时代,企业将由线下转向线上拓展业务。下面知网科

  • 优化SPF计算的措施有哪些? 优化SPF计算的方法有哪些?

    优化SPF计算的措施有哪些? 优化SPF计算的方法有哪些?

    小编带来的是优化SPF计算的措施有哪些的相关话题,接下来IT袋网带大家一起了解。 为了进一步提高OSPF的性能,可以考虑一些优化措施: 基于事件的计算 传统的OSPF在固定时间间隔进行SPF计算

  • 什么是BGP VRF

    什么是BGP VRF

    跟大家说一说什么是BGP的方法内容,一起跟随小编看看吧! BGP VRF(边界网关协议虚拟路由和转发)是一种 BGP 功能,用于在多租户或多 VRF 环境中提供更精细的路由控制和通告。 这种功能使得

  • 线程的五种状态 五种线程状态:了解并管理线程的状态转换

    线程的五种状态 五种线程状态:了解并管理线程的状态转换

    为大家介绍的是线程的五种状态的电脑小知识,接下来IT袋网小编就来介绍。 五种状态的说法来自于操作系统层面的划分 运行态 :分到 cpu 时间,能真正执行线程内代码的 就绪态 :有资格分