博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在SpringBoot中添加Redis
阅读量:5820 次
发布时间:2019-06-18

本文共 3863 字,大约阅读时间需要 12 分钟。

前言

在实际的开发中,会有这样的场景。有一个微服务需要提供一个查询的服务,但是需要查询的数据库表的数据量十分庞大,查询所需要的时间很长。

此时就可以考虑在项目中加入缓存。

引入依赖

在maven项目中引入如下依赖。并且需要在本地安装redis。

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

配置redis

在SpringBoot的配置文件中添加如下代码。

redis:    host: 127.0.0.1    port: 6379    timeout: 5000    database: 0    jedis:      pool:        max-idle: 8        max-wait:        min-idle: 0

添加redis配置文件

新建名为RedisConfig的配置类。

<!--more-->

import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.CachingConfigurerSupport;import org.springframework.cache.annotation.EnableCaching;import org.springframework.cache.interceptor.KeyGenerator;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheConfiguration;import org.springframework.data.redis.cache.RedisCacheManager;import org.springframework.data.redis.cache.RedisCacheWriter;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 java.time.Duration;/** * RedisConfig * * @author detectiveHLH * @date 2018-10-11 14:39 **/@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport {    @Bean    @Override    public KeyGenerator keyGenerator() {        return (target, method, params) -> {            StringBuilder sb = new StringBuilder();            sb.append(target.getClass().getName());            sb.append(method.getName());            for (Object obj : params) {                sb.append(obj.toString());            }            return sb.toString();        };    }    @Bean    public RedisTemplate
redisTemplate(RedisConnectionFactory factory) { ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); //redis序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); jackson2JsonRedisSerializer.setObjectMapper(om); StringRedisTemplate template = new StringRedisTemplate(factory); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } /** * 自定义CacheManager */ @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { //全局redis缓存过期时间 RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofDays(1)); RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory()); return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration); }}

添加缓存配置

在项目的service层中的实现类中,添加@Cacheable注解。

import java.util.HashMap;/** * UserLoginServiceImpl * * @author detectiveHLH * @date 2018-10-10 17:20 **/@Servicepublic class UserLoginServiceImpl implements UserLoginService {    @Autowired    private UserLoginMapper userLoginMapper;    @Override    @Cacheable(value = "usercache")    public HashMap getByUserName(String userName) {        System.out.println("此时没有走缓存");        return userLoginMapper.getByUserName(userName);    }}

然后调用一次该接口。就可以在redis中看到如下的key。

"usercache::com.detectiveHLH.api.service.impl.UserLoginServiceImplgetByUserNameSolarFarm"

同时,可以在控制台中看到有"此时没有走缓存"的输出。然后再次调用该接口,就可以看到返回的速度明显变快,并且没有"此时没有走缓存"输出。说明

此时的接口走的是缓存。

博客:

转载地址:http://juzdx.baihongyu.com/

你可能感兴趣的文章
用计算器计算“异或CRC”
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>
JDBC二查询(web基础学习笔记八)
查看>>
监听器(web基础学习笔记二十二)
查看>>
802.11 学习笔记
查看>>
Leetcode-Database-176-Second Highest Salary-Easy(转)
查看>>
构建Docker Compose服务堆栈
查看>>
最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )
查看>>
CentOS7下zip解压和unzip压缩文件
查看>>
Hadoop生态圈-Kafka常用命令总结
查看>>
如何基于Redis Replication设计并实现Redis-replicator?
查看>>
Linux 环境下 PHP 扩展的编译与安装 以 mysqli 为例
查看>>
浮点数内存如何存储的
查看>>
贪吃蛇
查看>>
EventSystem
查看>>
用WINSOCK API实现同步非阻塞方式的网络通讯
查看>>
玩一玩博客,嘿嘿
查看>>
P1352 没有上司的舞会
查看>>
ios11文件夹
查看>>
【HLOJ 559】好朋友的题
查看>>