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

     org.springframework.boot     spring-boot-starter-data-redis

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

package springboot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cache.annotation.EnableCaching;import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication@EnableScheduling@EnableCachingpublic class SpringbootApplication{   public static void main(String[] args) {       SpringApplication.run(SpringbootApplication.class, args);   }}

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

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

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

package springboot.config;import org.springframework.beans.factory.annotation.Value;import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.CachingConfigurerSupport;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheManager;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;/*** Redis缓存配置类* @author szekinwin**/@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport{   @Value("${spring.redis.host}")   private String host;   @Value("${spring.redis.port}")   private int port;   @Value("${spring.redis.timeout}")   private int timeout;      //自定义缓存key生成策略//    @Bean//    public KeyGenerator keyGenerator() {//        return new KeyGenerator(){//            @Override//            public Object generate(Object target, java.lang.reflect.Method method, Object... params) {//                StringBuffer sb = new StringBuffer();//                sb.append(target.getClass().getName());//                sb.append(method.getName());//                for(Object obj:params){//                    sb.append(obj.toString());//                }//                return sb.toString();//            }//        };//    }   //缓存管理器   @Bean   public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {       RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);       //设置缓存过期时间       cacheManager.setDefaultExpiration(10000);       return cacheManager;   }   @Bean   public RedisTemplate redisTemplate(RedisConnectionFactory factory){       StringRedisTemplate template = new StringRedisTemplate(factory);       setSerializer(template);//设置序列化工具       template.afterPropertiesSet();       return template;   }    private void setSerializer(StringRedisTemplate template){           @SuppressWarnings({ "rawtypes", "unchecked" })           Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);           ObjectMapper om = new ObjectMapper();           om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);           om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);           jackson2JsonRedisSerializer.setObjectMapper(om);           template.setValueSerializer(jackson2JsonRedisSerializer);    }}

5、新建UserMapper,如下:

package springboot.dao;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import org.springframework.cache.annotation.CacheConfig;import org.springframework.cache.annotation.CacheEvict;import org.springframework.cache.annotation.CachePut;import org.springframework.cache.annotation.Cacheable;import springboot.domain.User;@Mapper@CacheConfig(cacheNames = "users")public interface UserMapper {   @Insert("insert into user(name,age) values(#{name},#{age})")   int addUser(@Param("name")String name,@Param("age")String age);      @Select("select * from user where id =#{id}")   @Cacheable(key ="#p0")   User findById(@Param("id") String id);      @CachePut(key = "#p0")   @Update("update user set name=#{name} where id=#{id}")   void updataById(@Param("id")String id,@Param("name")String name);      //如果指定为 true,则方法调用后将立即清空所有缓存   @CacheEvict(key ="#p0",allEntries=true)   @Delete("delete from user where id=#{id}")   void deleteById(@Param("id")String id);   }
  • @Cacheable将查询结果缓存到redis中,(key="#p0")指定传入的第一个参数作为redis的key。
  • @CachePut,指定key,将更新的结果同步到redis中
  • @CacheEvict,指定key,删除缓存数据,allEntries=true,方法调用后将立即清除缓存

6、service层与controller层:

Service层代码如下:

package springboot.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import springboot.dao.UserMapper;import springboot.domain.User;@Servicepublic class UserService {   @Autowired   private UserMapper userMapper;         public User findById(String id){       return userMapper.findById(id);   }      public int addUser(String name,String age){       return userMapper.addUser(name,age);   }      public void updataById(String id,String name){        userMapper.updataById(id,name);   }      public void deleteById(String id){       userMapper.deleteById(id);   }}

Controller层,代码如下:

package springboot.web;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import springboot.domain.User;import springboot.service.UserService;@RestControllerpublic class HelloController {      @Autowired   private UserService userService;      @RequestMapping("/adduser")   public int addUser(@RequestParam("name")String name,@RequestParam("age")String age){       return userService.addUser(name, age);   }   @RequestMapping("/findUser")   public User findUser(@RequestParam("id") String id){       return userService.findById(id);   }   @RequestMapping("/updataById")   public String updataById(@RequestParam("id") String id,@RequestParam("name") String name){       try {           userService.updataById(id, name);       } catch (Exception e) {           return "error";       }       return "success";   }      @RequestMapping("/deleteById")   public String deleteById(@RequestParam("id") String id){       try {           userService.deleteById(id);       } catch (Exception e) {           return "error";       }       return "success";   }}

启动redis服务器,redis服务器的安装与启动可以参考博客,地址如下:

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

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

## LOG4J配置log4j.rootCategory=DEBUG,stdout## 控制台输出log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.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")进行缓存数据的更新,否则将查询到脏数据。

redistemplate使用_SpringBoot 使用 Redis 缓存相关推荐

  1. redis缓存原理与实现_SpringBoot整合Redis缓存,手把手教你一步一步实现

    推荐学习 分布式大全:反向代理/Redis/中间件/MySQL/消息,挑战阿里P7必备 都是"Redis惹的祸",害我差点挂在美团三面,真是"虚惊一场" 微服务 ...

  2. Spring Boot集成Redis缓存之RedisTemplate的方式

    前言 Spring Boot 集成Redis,将自动配置 RedisTemplate,在需要使用的类中注入RedisTemplate的bean即可使用 @Autowired private Redis ...

  3. SpringBoot集成Cache缓存(Redis缓存,RedisTemplate方式)

    1.说明 SpringBoot集成Redis缓存, 首先创建一个Spring Boot工程, 使用Maven向导方式创建:SpringBoot集成Maven工程 然后引入redis的spring bo ...

  4. @primary注解_springboot整合redis分别实现手动缓存和注解缓存

    一.前期准备 1.一个构建好的springboot系统2.下载redis安装包,去redis官网下载3.启动redis服务,windows下双击bin目录下的redis-service.exe 二.环 ...

  5. 点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:solocoder juejin.im/post/5bdc2 ...

  6. Spring Boot 结合 Redis 缓存

    Redis官网: 中:http://www.redis.cn/ 外:https://redis.io/ redis下载和安装 Redis官方并没有提供Redis的Windows版本,这里使用微软提供的 ...

  7. 高并发下redis缓存穿透问题解决方案

    一.使用场景 我们在日常的开发中,经常会遇到查询数据列表的问题,有些数据是不经常变化的,如果想做一下优化,在提高查询的速度的同时减轻数据库的压力,那么redis缓存绝对是一个好的解决方案. 二.需求 ...

  8. java清空redis缓存数据库_java相关:Spring Cache手动清理Redis缓存

    java相关:Spring Cache手动清理Redis缓存 发布于 2020-4-24| 复制链接 摘记: 这篇文章主要介绍了Spring Cache手动清理Redis缓存,文中通过示例代码介绍的非 ...

  9. 看完这篇Redis缓存三大问题,保你能和面试官互扯。

    日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题. 一旦涉及大数据量的需求,如一些商品抢购的情景,或者主页访问量瞬间较大的时 ...

最新文章

  1. 【Java】面试高频考题---topK问题详解(堆heap求解)
  2. CVPR 2020 Oral 文章汇总,包括论文解读与代码实现
  3. 转载:sql2005 管道的另一端上无任何进程解决方法
  4. POS机专业国密安全芯片
  5. redhat7.4安装神通数据库
  6. 从微信的改版中我看到了微信的焦虑
  7. bzoj 1079: [SCOI2008]着色方案
  8. 鼠标悬浮标签显示提示内容
  9. 技术不错的我去面试大厂,5分钟,就被秒了!憋屈~
  10. spring mvc入门案例
  11. python二维数据读取对齐_[Python ] Python 多维数组转换的维度对齐问题
  12. 使用 ABAP 代码制作手机能够扫描的二维码(QRCode)
  13. 3d之家开机号计算机网,3d之家最新开机号
  14. 贪心算法的数学证明 (更新中)
  15. 树莓派怎么切换输入法_树莓派如何安装中文输入法
  16. html中怎么写css代码,html style样式标签元素教程
  17. python 设置输入法为英文_win10输入法怎么设置为默认英语?win10输入法设置默认英文的方法...
  18. 企业上云,打造数字经济新动能|中机智库
  19. IDEA中使用Git功能和IDEA中的Git分支管理
  20. Spring Security 记住我功能原理以及实现

热门文章

  1. Notepad++ 配置 Markdown
  2. 编译环境与生成环境的JDK版本不一样,报:java.util.zip.ZipException: error in opening zip file
  3. Java Web学习笔记03:JSP元素
  4. 2017.9.26 块的计数 思考记录
  5. 【英语学习】【English L06】U05 Appointments L1 Can I book a taxi to the airport?
  6. 程序员的自我修养——读《软技能-代码之外的生存指南》笔记
  7. java版mosquitto客户端使用SSL功能的具体操作总结
  8. string与string.h的区别
  9. centos树莓派安装mysql_树莓派3B+安装CentOS7
  10. php处理html数据类型,PHP html_entity_decode() 函数 | 菜鸟教程