ehcache mysql_springboot+mybatis+ehcache实现缓存数据

一、springboot缓存简介

在 Spring Boot中,通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者:

* Generic

* JCache (JSR-107)

* EhCache 2.x

* Hazelcast

* Infinispan

* Redis

* Guava

* Simple

关于 Spring Boot 的缓存机制:

高速缓存抽象不提供实际存储,并且依赖于由org.springframework.cache.Cache和org.springframework.cache.CacheManager接口实现的抽象。 Spring Boot根据实现自动配置合适的CacheManager,只要缓存支持通过@EnableCaching注释启用即可。

二、实例

1、application.properyies

server.port=8850

#cache 多个用逗号分开

spring.cache.cache-names=userCache

spring.cache.jcache.config=classpath:ehcache.xml

# datasource

spring.datasource.name=ehcahcetest

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://127.0.0.1:3312/ehcahcetest

spring.datasource.username=root

spring.datasource.password=123456

# mybatis

mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

mybatis.config-location=classpath:mybatis/mybatis-config.xml

#mybatis.type-aliases-package=

2、springboot启动类

1 @SpringBootApplication2 @ComponentScan(basePackages="com.ehcache")//扫描组件

3 @EnableCaching4 public classEhcacheTestApplication {5

6 public static voidmain(String[] args) {7 SpringApplication.run(EhcacheTestApplication.class, args);8 }9 }

3、加了缓存注解的service

1 @Service2 public classUserService {3

4 @Autowired5 privateUserDao userDao;6

7 @CacheEvict(key="'user_'+#uid", value="userCache")8 public voiddel(String uid) {9 //TODO Auto-generated method stub

10 userDao.del(uid);11 }12

13 @CachePut(key="'user_'+#user.uid", value="userCache")14 public voidupdate(User user) {15 userDao.update(user);16 }17

18 @Cacheable(key="'user_'+#uid",value="userCache")19 publicUser getUserById(String uid){20 System.err.println("缓存里没有"+uid+",所以这边没有走缓存,从数据库拿数据");21 returnuserDao.findById(uid);22

23 }24

25 @CacheEvict(key="'user'",value="userCache")26 publicString save(User user) {27 //TODO Auto-generated method stub

28 returnuserDao.save(user);29 }30

31

32 }

4、ehcache.xml

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">

4

5

6

7

9 properties="peerDiscovery=manual,rmiUrls=//127.0.0.1:40002/userCache" />

10

14

15

17 properties="hostName=127.0.0.1, port=40001, socketTimeoutMillis=2000" />

18

20

21

22

23 overflowToDisk="false"diskPersistent="false"timeToIdleSeconds="0"

24 timeToLiveSeconds="600"memoryStoreEvictionPolicy="LRU" />

25

26

28 maxElementsInMemory="1000"

29 eternal="false"

30 timeToIdleSeconds="300"

31 timeToLiveSeconds="300"

32 overflowToDisk="false"

33 memoryStoreEvictionPolicy="LRU">

34

35

36

39

41 properties="42 replicateAsynchronously=true,43 replicatePuts=true,44 replicateUpdates=true,45 replicateUpdatesViaCopy=true,46 replicateRemovals=true " />

47

48

49

50

52 properties="bootstrapAsynchronously=true" />

53

54

55

56

5、OperationController.java 测试类

1 packagecom.ehcache.controller;2

3 importjava.util.ArrayList;4 importjava.util.HashMap;5 importjava.util.List;6 importjava.util.Map;7

8 importjavax.servlet.http.HttpServletRequest;9

10 importorg.springframework.beans.factory.annotation.Autowired;11 importorg.springframework.cache.annotation.CachePut;12 importorg.springframework.cache.annotation.Cacheable;13 importorg.springframework.web.bind.annotation.RequestMapping;14 importorg.springframework.web.bind.annotation.RequestMethod;15 importorg.springframework.web.bind.annotation.RequestParam;16 importorg.springframework.web.bind.annotation.ResponseBody;17 importorg.springframework.web.bind.annotation.RestController;18

19 importcom.ehcache.entity.User;20 importcom.ehcache.factory.CacheManagerFactory;21 importcom.ehcache.factory.UserFactory;22 importcom.ehcache.service.UserService;23 importcom.google.gson.Gson;24

25 importnet.sf.ehcache.Element;26

27

28 @RestController29 @RequestMapping("/o")30 public classOperationController {31

32 @Autowired33 privateUserService userService;34

35 Gson gson = newGson();36

37 CacheManagerFactory cmf =CacheManagerFactory.getInstance();38

39 @RequestMapping(value = "/test", method =RequestMethod.GET)40 publicString test(HttpServletRequest request){41

42 //保存一个新用户

43 String uid =userService.save(UserFactory.createUser());44 User user =userService.getUserById(uid);45 user.setUsername("xiaoli");46 userService.update(user);47

48 //查询该用户

49 System.out.println(gson.toJson(user, User.class));50 /*System.out.println();51 // 再查询该用户52 User user = userService.getUserById(uid);53 System.out.println(gson.toJson(user, User.class));54 System.out.println();55 // 更新该用户56 userService.update(user);57 // 更新好了再查询该用户58 System.out.println(gson.toJson(userService.getUserById(uid), User.class));59 System.out.println();60 // 删除该用户61 userService.del(uid);62 System.out.println();63 // 删除好了再查询该用户64 System.out.println(gson.toJson(userService.getUserById(uid), User.class));*/

65

66

67 //再保存一个新用户68 //String uid1 = userService.save(UserFactory.createUser());

69

70

71 returnuid;72 }73

74

75 @RequestMapping(value = "/test1", method =RequestMethod.GET)76 publicString test1(HttpServletRequest request,String key){77

78 String res = "";79

80 Element element = cmf.getElement("userCache", "map");81 if(element == null){82 Map map = new HashMap();83 map.put(key, key);84 cmf.setElement("userCache", new Element("map", map));85 }else{86 Map map = (Map) element.getValue();87 res =map.get(key);88 if(res == null){89 map.put(key, key);90 //多次测试发现,存在同名Element是,重复put的是无法复制的,因此当遇到两个节点同步不上的时候,先remove后put。

91 cmf.getCache("userCache").remove("map");92 cmf.setElement("userCache", new Element("map", map));93 res = "0;null";94 }95 }96 returnres;97 }98

99

100 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值