(1)pom.xml引入jar包,如下:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>

  (2)修改项目启动类,增加注解@EnableCaching,开启缓存功能,如下:

  1. package springboot;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.cache.annotation.EnableCaching;
  6. import org.springframework.scheduling.annotation.EnableScheduling;
  7.  
  8. @SpringBootApplication
  9. @EnableScheduling
  10. @EnableCaching
  11. public class SpringbootApplication{
  12.  
  13. public static void main(String[] args) {
  14. SpringApplication.run(SpringbootApplication.class, args);
  15. }
  16. }

  (3)application.properties中配置Redis连接信息,如下:

  1. # Redis数据库索引(默认为0)
  2. spring.redis.database=0
  3. # Redis服务器地址
  4. spring.redis.host=172.31.19.222
  5. # Redis服务器连接端口
  6. spring.redis.port=6379
  7. # Redis服务器连接密码(默认为空)
  8. spring.redis.password=
  9. # 连接池最大连接数(使用负值表示没有限制)
  10. spring.redis.pool.max-active=8
  11. # 连接池最大阻塞等待时间(使用负值表示没有限制)
  12. spring.redis.pool.max-wait=-1
  13. # 连接池中的最大空闲连接
  14. spring.redis.pool.max-idle=8
  15. # 连接池中的最小空闲连接
  16. spring.redis.pool.min-idle=0
  17. # 连接超时时间(毫秒)
  18. spring.redis.timeout=0

  (4)新建Redis缓存配置类RedisConfig,如下:

  1. package springboot.config;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.cache.CacheManager;
  4. import org.springframework.cache.annotation.CachingConfigurerSupport;
  5. import org.springframework.cache.annotation.EnableCaching;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.data.redis.cache.RedisCacheManager;
  9. import org.springframework.data.redis.connection.RedisConnectionFactory;
  10. import org.springframework.data.redis.core.RedisTemplate;
  11. import org.springframework.data.redis.core.StringRedisTemplate;
  12. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  13.  
  14. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  15. import com.fasterxml.jackson.annotation.PropertyAccessor;
  16. import com.fasterxml.jackson.databind.ObjectMapper;
  17.  
  18. /**
  19. * Redis缓存配置类
  20. * @author szekinwin
  21. *
  22. */
  23. @Configuration
  24. @EnableCaching
  25. public class RedisConfig extends CachingConfigurerSupport{
  26.  
  27. @Value("${spring.redis.host}")
  28. private String host;
  29. @Value("${spring.redis.port}")
  30. private int port;
  31. @Value("${spring.redis.timeout}")
  32. private int timeout;
  33.  
  34. //自定义缓存key生成策略
  35. // @Bean
  36. // public KeyGenerator keyGenerator() {
  37. // return new KeyGenerator(){
  38. // @Override
  39. // public Object generate(Object target, java.lang.reflect.Method method, Object... params) {
  40. // StringBuffer sb = new StringBuffer();
  41. // sb.append(target.getClass().getName());
  42. // sb.append(method.getName());
  43. // for(Object obj:params){
  44. // sb.append(obj.toString());
  45. // }
  46. // return sb.toString();
  47. // }
  48. // };
  49. // }
  50. //缓存管理器
  51. @Bean
  52. public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
  53. RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
  54. //设置缓存过期时间
  55. cacheManager.setDefaultExpiration(10000);
  56. return cacheManager;
  57. }
  58. @Bean
  59. public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory){
  60. StringRedisTemplate template = new StringRedisTemplate(factory);
  61. setSerializer(template);//设置序列化工具
  62. template.afterPropertiesSet();
  63. return template;
  64. }
  65. private void setSerializer(StringRedisTemplate template){
  66. @SuppressWarnings({ "rawtypes", "unchecked" })
  67. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
  68. ObjectMapper om = new ObjectMapper();
  69. om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  70. om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  71. jackson2JsonRedisSerializer.setObjectMapper(om);
  72. template.setValueSerializer(jackson2JsonRedisSerializer);
  73. }
  74. }

  (5)新建UserMapper,如下:

  1. package springboot.dao;
  2.  
  3. import org.apache.ibatis.annotations.Delete;
  4. import org.apache.ibatis.annotations.Insert;
  5. import org.apache.ibatis.annotations.Mapper;
  6. import org.apache.ibatis.annotations.Param;
  7. import org.apache.ibatis.annotations.Select;
  8. import org.apache.ibatis.annotations.Update;
  9. import org.springframework.cache.annotation.CacheConfig;
  10. import org.springframework.cache.annotation.CacheEvict;
  11. import org.springframework.cache.annotation.CachePut;
  12. import org.springframework.cache.annotation.Cacheable;
  13.  
  14. import springboot.domain.User;
  15.  
  16. @Mapper
  17. @CacheConfig(cacheNames = "users")
  18. public interface UserMapper {
  19.  
  20. @Insert("insert into user(name,age) values(#{name},#{age})")
  21. int addUser(@Param("name")String name,@Param("age")String age);
  22.  
  23. @Select("select * from user where id =#{id}")
  24. @Cacheable(key ="#p0")
  25. User findById(@Param("id") String id);
  26.  
  27. @CachePut(key = "#p0")
  28. @Update("update user set name=#{name} where id=#{id}")
  29. void updataById(@Param("id")String id,@Param("name")String name);
  30.  
  31. //如果指定为 true,则方法调用后将立即清空所有缓存
  32. @CacheEvict(key ="#p0",allEntries=true)
  33. @Delete("delete from user where id=#{id}")
  34. void deleteById(@Param("id")String id);
  35.  
  36. }

  @Cacheable将查询结果缓存到redis中,(key="#p0")指定传入的第一个参数作为redis的key。

  @CachePut,指定key,将更新的结果同步到redis中

  @CacheEvict,指定key,删除缓存数据,allEntries=true,方法调用后将立即清除缓存

  (6)service层与controller层跟上一篇整合一样,启动redis服务器,redis服务器的安装与启动可以参考之前的博客,地址如下:

    http://www.cnblogs.com/gdpuzxs/p/6623171.html

  (7)配置log4j日志信息,如下:

  1. ## LOG4J配置
  2. log4j.rootCategory=DEBUG,stdout
  3. ## 控制台输出
  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  5. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  6. log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

  (8)验证redis缓存

  首先我们向user表总插入一条数据,数据库显示如下:

  

  现在,我们查询一下user表中id=24的数据,观擦控制台输出的信息,如下:

  

  通过控制台输出信息我们可以知道,这次执行了数据库查询,并开启了Redis缓存查询结果。接下来我们再次查询user表中id=24的数据,观察控制台,如下:

  

  通过控制台输出信息我们可以知道,这次并没有执行数据库查询,而是从Redis缓存中查询,并返回查询结果。我们查看redis中的信息,如下:

  

  方法finduser方法使用了注解@Cacheable(key="#p0"),即将id作为redis中的key值。当我们更新数据的时候,应该使用@CachePut(key="#p0")进行缓存数据的更新,否则将查询到脏数据。

转自 :https://www.cnblogs.com/gdpuzxs/p/7222309.html

sprinboot+redis的更多相关文章

  1. linux上安装redis的踩坑过程

    redis用处很广泛,我不再啰嗦了,我按照网上教程想在linux上安装下,开始了踩坑过程,网上买了一个linux centos7.3,滴滴云的,巨坑无比啊,不建议大家用这家的! redis 为4.0, ...

  2. springboot(十二)-分布式锁(redis)

    什么是分布式锁? 要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁.进程锁. 线程锁:主要用来给方法.代码块加锁.当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段.线程锁只在同一 ...

  3. Centos 7 redis、tomcat、Spring Boot添加开机自启服务

    一.redis添加开机自启 1.添加服务配置文件 [root@test system]# vim /etc/systemd/system/redis-server.service 2.服务配置文件内容 ...

  4. 使用redis构建可靠分布式锁

    关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...

  5. Ignite性能测试以及对redis的对比

    测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...

  6. mac osx 安装redis扩展

    1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis   ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...

  7. Redis/HBase/Tair比较

    KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式    支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...

  8. Redis数据库

    Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...

  9. redis 学习笔记(2)

    redis-cluster 简介 redis-cluster是一个分布式.容错的redis实现,redis-cluster通过将各个单独的redis实例通过特定的协议连接到一起实现了分布式.集群化的目 ...

随机推荐

  1. C# 设计模式巩固 - 工厂方法模式

    前言 实在编不出来了~ 介绍 - 工厂方法模式 官方定义:(下面摘自百度百科)工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中 ...

  2. background-size: contain 与cover的区别,以及ie78的兼容写法

    一:background-size: contain 与cover的区别: 作用: 都是将图片以**相同宽高比**缩放以适应整个容器的宽高. 不同之处在于: 1.  在no-repeat情况下,如果容 ...

  3. C#调用C++编译的DLL--

    引用 C#调用C++编译的DLL详解 可以单步跟踪进入dll的源码!每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍.首先,您需要了解什么是托管,什么是非托管.一般可以认 ...

  4. tensorflow_gpu-1.2.1-cp35-cp35m-win_amd64.whl文件怎么安装?

    当你从迅雷下载之后,怎么样来安装上面的文件呢? 这也是一个问题,对于新手来说,是不知道的.其实比较简单,如下: 用命令:pip  install tensorflow_gpu-1.2.1-cp35-c ...

  5. tableView 三级展开 嵌入collocationView

    目前有个需求,需要在写一个文件夹结构的类型,tableView分类显示 collocationView 遇到的问题是:tableView cell中嵌套了 collocationView 后,coll ...

  6. 上传IOS项目和版本更新流程图

    上传IOS项目和版本更新流程图 必备IDP证书和distribution证书(第一个证书是真机部署测试时用到的,后者证书是发布时需要用到的,缺一不可). 我就说说接下来应该做的流程.在你保证拥有以上两 ...

  7. xshell连接及优化

    xshell 连接 问题:当你的xshell与服务器连接不上时 1:可先排查道路通不通 正常: 不正常: 1:查看服务器ip正不正确 2:vmware 编辑-虚拟网络编辑器 3:windows服务  ...

  8. Form表单如何传递List数组对象到后台的解决办法(转)

    举例说明: [后台有一个对象 User    一个PhotoDo对象],结构如下: public class User{ private String username; private List&l ...

  9. linux自学(三)之开启虚拟机

    上一篇:linux自学(二)之centos7镜像安装 前面都已经铺垫好了,下面就是开始安装镜像了,真正的开启一台linux机器. 点击开启此虚拟机,如图: 之后就是等待了,然后就是开始配置,首先如下图 ...

  10. POJ1741 Tree + BZOJ1468 Tree 【点分治】

    POJ1741 Tree + BZOJ1468 Tree Description Give a tree with n vertices,each edge has a length(positive ...