高并发 -- 多级缓存

本文详细介绍了在高并发环境下如何构建多级缓存系统,包括JVM进程缓存、使用Lua语言、OpenResty的安装与配置、OpenResty与JVM服务器交互以及Redis的数据获取。此外,还探讨了缓存同步方案,如Canal的安装与应用,以确保数据一致性。
摘要由CSDN通过智能技术生成

 

 JVM 进程缓存

 

 

@SpringBootTest
public class CaffeineTest {

    @Test
    void test() {
        //构建cache对象
        Cache<String, String> cache = Caffeine.newBuilder().build();
        //存数据
        cache.put("gf", "lb");

        //取数据
        String gf = cache.getIfPresent("gf");
        System.out.println(gf);

        //取取数据,如果未命中,查询数据库
        String defaultGF = cache.get("defaultGF", key -> {
            //根据key,去查询数据库
            return "hana";
        });

        System.out.println(defaultGF);
    }

    @Test
    void maxSize() throws InterruptedException {
        //构建cache对象,最大存储数量为1,如果存入多个,不会立刻删除
        Cache<String, String> cache = Caffeine.newBuilder().maximumSize(1).build();
        cache.put("gf1", "gf1");
        cache.put("gf2", "gf2");
        cache.put("gf3", "gf3");

        Thread.sleep(10L);

        System.out.println(cache.getIfPresent("gf1"));
        System.out.println(cache.getIfPresent("gf2"));
        System.out.println(cache.getIfPresent("gf3"));
    }

    @Test
    void expire() throws InterruptedException {
        //构建cache对象,写入后多长时间失效
        Cache<String, String> cache = Caffeine.newBuilder().expireAfterWrite(1L, TimeUnit.SECONDS).build();
        cache.put("gf1", "gf1");
        System.out.println(cache.getIfPresent("gf1"));

        Thread.sleep(1200L);

        System.out.println(cache.getIfPresent("gf1"));
    }
}

 实现进程缓存

@Configuration
public class CaffeineConfig {

    @Bean
    public Cache<Long, User> userCache(){
        return Caffeine.newBuilder()
                .initialCapacity(100)
                .maximumSize(10_000)
                .build();
    }

    @Bean
    public Cache<Long, Blog> blogCache(){
        return Caffeine.newBuilder()
                .initialCapacity(100)
                .maximumSize(10_000)
                .build();
    }
}

@Component
public class CaffeineService {
    @Autowired
    private Cache<Long, User> userCache;

    @Autowired
    private Cache<Long, Blog> blogCache;


    public User getUser(Long id) {
        //当缓存中没有,则查询数据库,查到结果放入缓存。减少数据库交互,提供并发量
        return userCache.get(id, key -> {
            //select * from user where id = key
            return new User("lb", 32);
        });
    }

    public Blog getBlog(Long id) {
        return blogCache.get(id, key -> {
            //select * from blog where id = key
            return new Blog();
        });
    }
}

Lua 语言

Lua语言可以在nginx中开发使用的语言

 

 

 

 

 

多级缓存

openResty

 安装

1.安装开发库

首先要安装OpenResty的依赖开发库,执行命令:

yum install -y pcre-devel openssl-devel gcc --skip-broken

2.安装OpenResty仓库

你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum check-update 命令)。运行下面的命令就可以添加我们的仓库:

yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

如果提示说命令不存在,则运行:

yum install -y yum-utils 

然后再重复上面的命令

3.安装OpenResty

然后就可以像下面这样安装软件包,比如 openresty

yum install -y openresty

4.安装opm工具

opm是OpenResty的一个管理工具,可以帮助我们安装一个第三方的Lua模块。

如果你想安装命令行工具 opm,那么可以像下面这样安装 openresty-opm 包:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值