redistemplate使用_SpringBoot 使用 Redis 缓存
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 缓存相关推荐
- redis缓存原理与实现_SpringBoot整合Redis缓存,手把手教你一步一步实现
推荐学习 分布式大全:反向代理/Redis/中间件/MySQL/消息,挑战阿里P7必备 都是"Redis惹的祸",害我差点挂在美团三面,真是"虚惊一场" 微服务 ...
- Spring Boot集成Redis缓存之RedisTemplate的方式
前言 Spring Boot 集成Redis,将自动配置 RedisTemplate,在需要使用的类中注入RedisTemplate的bean即可使用 @Autowired private Redis ...
- SpringBoot集成Cache缓存(Redis缓存,RedisTemplate方式)
1.说明 SpringBoot集成Redis缓存, 首先创建一个Spring Boot工程, 使用Maven向导方式创建:SpringBoot集成Maven工程 然后引入redis的spring bo ...
- @primary注解_springboot整合redis分别实现手动缓存和注解缓存
一.前期准备 1.一个构建好的springboot系统2.下载redis安装包,去redis官网下载3.启动redis服务,windows下双击bin目录下的redis-service.exe 二.环 ...
- 点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:solocoder juejin.im/post/5bdc2 ...
- Spring Boot 结合 Redis 缓存
Redis官网: 中:http://www.redis.cn/ 外:https://redis.io/ redis下载和安装 Redis官方并没有提供Redis的Windows版本,这里使用微软提供的 ...
- 高并发下redis缓存穿透问题解决方案
一.使用场景 我们在日常的开发中,经常会遇到查询数据列表的问题,有些数据是不经常变化的,如果想做一下优化,在提高查询的速度的同时减轻数据库的压力,那么redis缓存绝对是一个好的解决方案. 二.需求 ...
- java清空redis缓存数据库_java相关:Spring Cache手动清理Redis缓存
java相关:Spring Cache手动清理Redis缓存 发布于 2020-4-24| 复制链接 摘记: 这篇文章主要介绍了Spring Cache手动清理Redis缓存,文中通过示例代码介绍的非 ...
- 看完这篇Redis缓存三大问题,保你能和面试官互扯。
日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题. 一旦涉及大数据量的需求,如一些商品抢购的情景,或者主页访问量瞬间较大的时 ...
最新文章
- 【Java】面试高频考题---topK问题详解(堆heap求解)
- CVPR 2020 Oral 文章汇总,包括论文解读与代码实现
- 转载:sql2005 管道的另一端上无任何进程解决方法
- POS机专业国密安全芯片
- redhat7.4安装神通数据库
- 从微信的改版中我看到了微信的焦虑
- bzoj 1079: [SCOI2008]着色方案
- 鼠标悬浮标签显示提示内容
- 技术不错的我去面试大厂,5分钟,就被秒了!憋屈~
- spring mvc入门案例
- python二维数据读取对齐_[Python ] Python 多维数组转换的维度对齐问题
- 使用 ABAP 代码制作手机能够扫描的二维码(QRCode)
- 3d之家开机号计算机网,3d之家最新开机号
- 贪心算法的数学证明 (更新中)
- 树莓派怎么切换输入法_树莓派如何安装中文输入法
- html中怎么写css代码,html style样式标签元素教程
- python 设置输入法为英文_win10输入法怎么设置为默认英语?win10输入法设置默认英文的方法...
- 企业上云,打造数字经济新动能|中机智库
- IDEA中使用Git功能和IDEA中的Git分支管理
- Spring Security 记住我功能原理以及实现
热门文章
- Notepad++ 配置 Markdown
- 编译环境与生成环境的JDK版本不一样,报:java.util.zip.ZipException: error in opening zip file
- Java Web学习笔记03:JSP元素
- 2017.9.26 块的计数 思考记录
- 【英语学习】【English L06】U05 Appointments L1 Can I book a taxi to the airport?
- 程序员的自我修养——读《软技能-代码之外的生存指南》笔记
- java版mosquitto客户端使用SSL功能的具体操作总结
- string与string.h的区别
- centos树莓派安装mysql_树莓派3B+安装CentOS7
- php处理html数据类型,PHP html_entity_decode() 函数 | 菜鸟教程