当前位置: 首页 > news >正文

高性能两级缓存J2Cache

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

之前写了一篇Spring Cache 使用redis 实现两级缓存,后来查资料发现目前已经有一个很完善的两级缓存开源项目J2Cache,作者是 开源中国:红薯

Demo地址:https://gitee.com/itsaysay/spring-cache-j2cache-demo

开源项目地址:https://gitee.com/ld/J2Cache/tree/master
J2Cache的一二级缓存支持自定义,一级缓存支持Caffeine、Ehcache2 和 Ehcache3,二级缓存支持redis、memcached
消息通知支持JGroups、Redis、RabbitMQ、RocketMQ
目前提供Hibernate、Mybatis、Session、Spring Cache、Spring Boot适配

下面简单看下在Spring Boot中使用J2Cache的例子

Spring Boot示例

pom.xml引入
目前j2cache最近版本是2.7.6-release,但我发现如果使用这个版本,j2cache core包无法下载

        <dependency>
            <groupId>net.oschina.j2cache</groupId>
            <artifactId>j2cache-spring-boot-starter</artifactId>
            <version>2.7.5-release</version>
        </dependency>

application.properties配置

#j2cache配置文件路径
j2cache.config-location=classpath:j2cache.properties
#开启spring cache支持
j2cache.open-spring-cache=true

最后从J2Cache项目中Copy caffeine.properties,j2cache.properties这两个文件
这样就配置完毕了,是不是很简单,测试示例

UserService

@Service
@CacheConfig(cacheNames = "person")
public class UserService {

    private Person person = null;


    @Cacheable(key = "#id")
    public Person getUserById(Long id){
        //如果没走缓存,会打印下面这句话
        System.out.println("=>操作数据库,根据id获取用户信息");
        return this.person;
    }


    @CachePut(key = "#person.id")
    public Person savePerson(Person person){
        System.out.println("=>操作数据库保存用户数据");
        this.person = person;
        return this.person;
    }


    @CacheEvict(key = "#id")
    public void delPerson(Long id){
        System.out.println("=>操作数据库删除用户数据");
        person = null;
    }

}

Test用例

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Autowired
    private  UserService userService;

    @Test
    public void testRedisCache(){
        Person person = new Person(1L,"陈大侠","18","男");

        System.out.println("插入用户,新增缓存");
        userService.savePerson(person);

        System.out.println("第一次获取用户,存在缓存就从缓存返回,不存在就从数据库取");
        Person dbPerson = userService.getUserById(1L);
        System.out.println(dbPerson);

        System.out.println("第二次获取用户");
        dbPerson = userService.getUserById(1L);
        System.out.println(dbPerson);

        System.out.println("更新用户,更新缓存");
        person.setAge("88");
        userService.savePerson(person);

        System.out.println("第二次获取用户,看缓存是否有变化");
        dbPerson = userService.getUserById(1L);
        System.out.println(dbPerson);

        System.out.println("删除用户,删除缓存");
        userService.delPerson(1L);

        System.out.println("第三次再次获取用户,看缓存是否有变化");
        dbPerson = userService.getUserById(1L);
        System.out.println(dbPerson);
    }

}

跑一下看看

插入用户,新增缓存
=>操作数据库保存用户数据
第一次获取用户,存在缓存就从缓存返回,不存在就从数据库取
Person{id=1, name='陈大侠', age='18', sex='男'}
第二次获取用户
Person{id=1, name='陈大侠', age='18', sex='男'}
更新用户,更新缓存
=>操作数据库保存用户数据
第二次获取用户,看缓存是否有变化
Person{id=1, name='陈大侠', age='88', sex='男'}
删除用户,删除缓存
=>操作数据库删除用户数据
第三次再次获取用户,看缓存是否有变化
=>操作数据库,根据id获取用户信息
null

转载于:https://my.oschina.net/itsaysay/blog/3011841

相关文章:

  • Webpack 4 学习01(基础配置)
  • 我的zsh配置, 2019最新方案
  • Java基础篇
  • 数据库基础SQL知识面试题二
  • 取代Python多进程!伯克利开源分布式框架Ray
  • mysql常用命令汇总
  • 前端知识点整理(待续)
  • Angular 响应式表单 基础例子
  • 2019年2月22日 807. Max Increase to Keep City Skyline
  • 微信小程序:实现悬浮返回和分享按钮
  • 巨杉中标渤海银行,股份制银行再下一城
  • python使用elasticsearch模块操作elasticsearch
  • “春节十二响”C语言代码开源了,你要提 PR 吗?
  • VS 2019要来了,是时候了解一下C# 8.0新功能
  • 北大AI公开课2019 | 雷鸣:人工智能革命与机遇
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 77. Combinations
  • Android框架之Volley
  • Angular2开发踩坑系列-生产环境编译
  • C++类中的特殊成员函数
  • Elasticsearch 参考指南(升级前重新索引)
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript服务器推送技术之 WebSocket
  • JS笔记四:作用域、变量(函数)提升
  • Spring Cloud中负载均衡器概览
  • 浮现式设计
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 我这样减少了26.5M Java内存!
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 如何在招聘中考核.NET架构师
  • #### go map 底层结构 ####
  • #FPGA(基础知识)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (145)光线追踪距离场柔和阴影
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (编译到47%失败)to be deleted
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)德国人的记事本
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .apk文件,IIS不支持下载解决
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET4.0并行计算技术基础(1)
  • .Net下的签名与混淆
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @angular/cli项目构建--Dynamic.Form
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ 手记 ] 关于tomcat开机启动设置问题