添加依赖 pom.xml
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-data-redis</artifactid>
</dependency>application.yml 配置redis连参数
spring:
# redis 配置
redis:
# 地址
host: 127.0.0.1
# 端口,默认为6379
port: 6379
# 数据库索引
database: 2
# 密码
password:
# 连接超时时间
timeout: 10s配置类
import com.fasterxml.jackson.annotation.jsonautodetect;
import com.fasterxml.jackson.annotation.propertyaccessor;
import com.fasterxml.jackson.databind.objectmapper;
import org.springframework.cache.annotation.enablecaching;
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.serializer.jackson2jsonredisserializer;
import org.springframework.data.redis.serializer.redisserializationcontext;
import java.time.duration;
import java.util.hashmap;
import java.util.map;
@configuration
public class cacheconfig {
/**
* 最新版,设置redis缓存过期时间
*/
@bean
public rediscachemanager cachemanager(redisconnectionfactory redisconnectionfactory) {
return new rediscachemanager(
rediscachewriter.nonlockingrediscachewriter(redisconnectionfactory),
this.getrediscacheconfigurationwithttl( 60) // 默认策略,未配置的 key 会使用这个
);
}
private rediscacheconfiguration getrediscacheconfigurationwithttl(integer seconds) {
jackson2jsonredisserializer<object> 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);
rediscacheconfiguration rediscacheconfiguration = rediscacheconfiguration.defaultcacheconfig();
rediscacheconfiguration = rediscacheconfiguration.serializevalueswith(
redisserializationcontext
.serializationpair
.fromserializer(jackson2jsonredisserializer)
).entryttl(duration.ofseconds(seconds));
return rediscacheconfiguration;
}
}启动类上 加 @enablecaching 注解
测试
1.接口查询
2. 缓存查询验证
@apioperation(value = "根据id获取详情",notes = "查询")
@cacheable(cachenames = "testacache", key = "#id")
@requestmapping(value = "/get/{id}",method = requestmethod.get)
public testa get(@pathvariable long id){
log.info("进行了mysql查询");
return testservice.getbyid(id);
} @getmapping("/get/redis/cache")
@apioperation(value="查看redis缓存信息")
public string getrediscache(){
// 从ioc容器中通过类型获取bean
rediscachemanager rediscachemanager = springutils.getbean(rediscachemanager.class);
// 从ioc容器中通过名称获取bean
rediscachemanager rediscachemanager2 = springutils.getbean("cachemanager");
cache democache = rediscachemanager.getcache("testacache");
log.info(democache.get(78, testa.class)+"");
return democache.getname();
}springutils.class
import org.springframework.aop.framework.aopcontext;
import org.springframework.beans.beansexception;
import org.springframework.beans.factory.nosuchbeandefinitionexception;
import org.springframework.beans.factory.config.beanfactorypostprocessor;
import org.springframework.beans.factory.config.configurablelistablebeanfactory;
import org.springframework.context.applicationcontext;
import org.springframework.context.applicationcontextaware;
import org.springframework.stereotype.component;
@component
public final class springutils implements beanfactorypostprocessor, applicationcontextaware
{
/** spring应用上下文环境 */
private static configurablelistablebeanfactory beanfactory;
private static applicationcontext applicationcontext;
@override
public void postprocessbeanfactory(configurablelistablebeanfactory beanfactory) throws beansexception
{
springutils.beanfactory = beanfactory;
}
@override
public void setapplicationcontext(applicationcontext applicationcontext) throws beansexception
{
springutils.applicationcontext = applicationcontext;
}
/**
* 获取对象
*
* @param name
* @return object 一个以所给名字注册的bean的实例
* @throws beansexception
*
*/
@suppresswarnings("unchecked")
public static <t> t getbean(string name) throws beansexception
{
return (t) beanfactory.getbean(name);
}
/**
* 获取类型为requiredtype的对象
*
* @param clz
* @return
* @throws beansexception
*
*/
public static <t> t getbean(class<t> clz) throws beansexception
{
t result = (t) beanfactory.getbean(clz);
return result;
}
/**
* 如果beanfactory包含一个与所给名称匹配的bean定义,则返回true
*
* @param name
* @return boolean
*/
public static boolean containsbean(string name)
{
return beanfactory.containsbean(name);
}
/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(nosuchbeandefinitionexception)
*
* @param name
* @return boolean
* @throws nosuchbeandefinitionexception
*
*/
public static boolean issingleton(string name) throws nosuchbeandefinitionexception
{
return beanfactory.issingleton(name);
}
/**
* @param name
* @return class 注册对象的类型
* @throws nosuchbeandefinitionexception
*
*/
public static class<?> gettype(string name) throws nosuchbeandefinitionexception
{
return beanfactory.gettype(name);
}
/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
*
* @param name
* @return
* @throws nosuchbeandefinitionexception
*
*/
public static string[] getaliases(string name) throws nosuchbeandefinitionexception
{
return beanfactory.getaliases(name);
}
/**
* 获取aop代理对象
*
* @param invoker
* @return
*/
@suppresswarnings("unchecked")
public static <t> t getaopproxy(t invoker)
{
return (t) aopcontext.currentproxy();
}
/**
* 获取当前的环境配置,无配置返回null
*
* @return 当前的环境配置
*/
public static string[] getactiveprofiles()
{
return applicationcontext.getenvironment().getactiveprofiles();
}
/**
* 获取配置文件中的值
*
* @param key 配置文件的key
* @return 当前的配置文件的值
*
*/
public static string getrequiredproperty(string key)
{
return applicationcontext.getenvironment().getrequiredproperty(key);
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论