当前位置: 首页 > news >正文

外贸电子网站企业网站设计制作

外贸电子网站,企业网站设计制作,主机 可以 多少 网站,做简历哪个网站比较好今天我们来讲讲怎么在spring boot 中整合redis 实现对数据库查询结果的缓存。首先第一步要做的就是在pom.xml文件添加spring-boot-starter-data-redis。要整合缓存,必不可少的就是我们要继承一个父类CachingConfigurerSupport。我们先看看这个类的源码 public class…

今天我们来讲讲怎么在spring boot 中整合redis 实现对数据库查询结果的缓存。
首先第一步要做的就是在pom.xml文件添加spring-boot-starter-data-redis。
要整合缓存,必不可少的就是我们要继承一个父类CachingConfigurerSupport。我们先看看这个类的源码

 

public class CachingConfigurerSupport implements CachingConfigurer { // Spring's central cache manage SPI , @Override @Nullable public CacheManager cacheManager() { return null; } //key的生成策略 @Override @Nullable public KeyGenerator keyGenerator() { return null; } //Determine the Cache instance(s) to use for an intercepted method invocation. @Override @Nullable public CacheResolver cacheResolver() { return null; } //缓存错误处理 @Override @Nullable public CacheErrorHandler errorHandler() { return null; } }

RedisConfig类

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport { @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.addMessageListener(listenerAdapter, new PatternTopic("chat")); return container; } @Bean MessageListenerAdapter listenerAdapter(Receiver receiver) { return new MessageListenerAdapter(receiver, "receiveMessage"); } @Bean Receiver receiver(CountDownLatch latch) { return new Receiver(latch); } @Bean CountDownLatch latch() { return new CountDownLatch(1); } public class Receiver { private CountDownLatch latch; @Autowired public Receiver(CountDownLatch latch) { this.latch = latch; } public void receiveMessage(String message) { latch.countDown(); } } @Bean public KeyGenerator myKeyGenerator() { return new KeyGenerator() { @Override public Object generate(Object o, Method method, Object... objects) { StringBuilder sb = new StringBuilder(); sb.append(o.getClass().getName()); sb.append(method.getName()); for (Object obj : objects) { sb.append(JSON.toJSONString(obj)); } return sb.toString(); } }; } /** * @param redisConnectionFactory * @return * @// TODO: 2018/4/27 redis fastjson序列化 */ @Bean @ConditionalOnMissingBean(name = "redisTemplate") public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate<>(); //使用fastjson序列化 FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); // 全局开启AutoType,不建议使用 // ParserConfig.getGlobalInstance().setAutoTypeSupport(true); // 建议使用这种方式,小范围指定白名单 ParserConfig.getGlobalInstance().addAccept("com.developlee.models."); // value值的序列化采用fastJsonRedisSerializer template.setValueSerializer(fastJsonRedisSerializer); template.setHashValueSerializer(fastJsonRedisSerializer); // key的序列化采用StringRedisSerializer template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setConnectionFactory(redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean(StringRedisTemplate.class) public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } /** * @return * @// TODO: 2018/4/27 设置redis 缓存时间 5 分钟 */ @Bean public RedisCacheConfiguration redisCacheConfiguration() { FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofMinutes(5)); return configuration; } }

这段代码中,重点关注对象是RedisTemplate 和StringRedisTemplate还有RedisMessageListenerContainer,RedisTemplate和StringRedisTemplate设置了一些序列化的参数和指定序列化的范围(主要为了防止黑客利用Redis的序列化漏洞),@ConditionalOnMissingBean注解的意思就是如果容器中没有这个类型Bean就选择当前Bean。RedisMessageListenerContainer是为Redis消息侦听器提供异步行为的容器,主要处理低层次的监听、转换和消息发送的细节。

再来看看application.xml我们的配置 , so easy~~

spring:redis:database: 0  # Redis数据库索引(默认为0)host: 192.168.0.100 # Redis服务器地址 (默认为127.0.0.1)port: 6379 # Redis服务器连接端口 (默认为6379) password: 123456 # Redis服务器连接密码(默认为空) timeout: 2000 # 连接超时时间(毫秒) cache: type: redis

接下来我们就可以使用Redis缓存了,在Service层我们用注解@Cacheable来缓存查询的结果。

    @Cacheable(value= "orderDetailCache", keyGenerator = "myKeyGenerator", unless = "#result eq null")public OrderDetailEntity findOrderDetail(OrderDetailEntity orderDetailEntity) { return orderDetailDao.findEntity(orderDetailEntity); }

转载于:https://www.cnblogs.com/huangwentian/p/10375198.html

http://www.lbrq.cn/news/2733913.html

相关文章:

  • 做淘宝的网线可以浏览台湾网站吗seo排名优化软件
  • 网站建好后广告是不是需要搜索引擎优化方法总结
  • 电脑公司网站设计软文撰写
  • 济南市建设信用网站武汉seo管理
  • 怎样建设自己的美甲网站做推广
  • 免费的网站怎么做谷歌关键词
  • 建设官网的网站首页北京网站优化
  • 响应式网站建设公司‘南宁关键词优化软件
  • 网站域名space关键词优化排名网站
  • 深圳布吉网站建设云搜索app官网
  • 网站高端建设电商怎么做新手入门
  • 椒江做网站文登seo排名
  • 全屏网站宽度苏州网站建设哪家靠谱
  • wordpress忘记了密码忘记北京优化推广公司
  • 可以网站可以做免费的文案广告语so导航 抖音
  • 江门网站建设运营团队竞价专员是做什么的
  • 江苏网站建设 seo什么是网络推广工作
  • 许昌网站建设浏览器下载
  • 中国建设银行有哪些招聘网站大数据查询平台
  • 移动端网站如何做导出功能西安今日头条新闻消息
  • 郑州做网站推广地关键词首页排名优化价格
  • 建电影网站程序网站维护收费标准
  • 宝安电子厂做网站一站式媒体发稿平台
  • 仿网站ppt怎么做百度广告大全
  • 电子商务网站的功能包括韶山百度seo
  • 做室内设计兼职的网站广告设计需要学什么
  • 搜狗站群系统简述网络推广的方法
  • 电商加盟的网站建设域名状态查询工具
  • 嘉兴制作网站收录查询
  • 唐山市住房建设委官方网站网站怎样优化seo
  • vscode中用python调用matlab的函数(环境安装)
  • SpringBoot 集成Ollama 本地大模型
  • 初识c语言————宏定义和调用
  • 4. 索引数据的增删改查
  • Video-R1论文解读
  • 【慕伏白】CTFHub 技能树学习笔记 -- 基础知识 签到