范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Redis实现SpringBoot集成Redis多数据源

  背景
  有些时候在一个项目里,由于业务问题,可能仅仅操作一个Redis数据源已经不能满足,比如某个运营系统,对接着多个不同的服务,处理数据时又不想通过远程调用,那只能增加一个数据源来解决问题,像MySQL的多数据源一样。配置示例
  这里连接池选用的是lettuce。redis:   host: localhost   port: 6379   password: 123456   timeout: 60000   database: 10   lettuce:     pool:       min-idle: 0       max-idle: 10       max-wait: -1       max-active: 200       time-between-eviction-runs: -1 redis-live:   host: localhost   port: 6379   password: 123456   database: 0 实现代码
  关于序列化使用的是jackson。
  以下提供了创建RedisTemplate以及StringRedisTemplate。
  关于二者的区别:两者的关系是StringRedisTemplate继承RedisTemplate。两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。 StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。 RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。/**  * 

* RedisLettuce 连接实例配置 * * * @author zhengshangjin * @version 1.0.0 * @since 1.0.0 * created on 2020-04-23 */ @Configuration @EnableCaching public class RedisLettuceConfig { /** * live数据源 */ @Value("${spring.redis-live.host}") private String redisLiveHost; @Value("${spring.redis-live.port}") private int redisLivePort; @Value("${spring.redis-live.password}") private String redisLivePass; @Value("${spring.redis-live.database}") private int redisLiveDb; /** * 公共配置 */ @Value("${spring.redis.timeout}") private long timeout; @Value("${spring.redis.lettuce.pool.min-idle}") private int minIdle; @Value("${spring.redis.lettuce.pool.max-idle}") private int maxIdle; @Value("${spring.redis.lettuce.pool.max-active}") private int maxActive; @Value("${spring.redis.lettuce.pool.max-wait}") private int maxWait; /** * 装配 RedisTemplate *

* 这里根据默认连接配置 装配实例 * * * @param redisConnectionFactory 默认 * @return redisTemplate * @author zhengshangjin * created on 2020-04-23 */ @Bean(name = "redisTemplate") public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { return createRedisTemplate(redisConnectionFactory); } /** * 装配 StringRedisTemplate *

* 这里根据默认连接配置 装配实例 * * @param redisConnectionFactory 默认 * @return StringRedisTemplate * @author zhengshangjin * created on 2020-04-23 */ @Bean(name = "stringRedisTemplate") public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { return createStringRedisTemplate(redisConnectionFactory); } /** * 装配 Live数据源 * * @return liveStringRedisTemplate * @author zhengshangjin * created on 2020-04-23 */ @Bean(name = "liveStringRedisTemplate") public StringRedisTemplate liveStringRedisTemplate() { return createStringRedisTemplate(redisLiveHost, redisLivePort, redisLivePass, redisLiveDb); } /** * 创建 RedisTemplate * * @param redisConnectionFactory redisConnectionFactory * @return RedisTemplate * @author zhengshangjin * created on 2020-04-23 */ public RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); Jackson2JsonRedisSerializer<?> serializer = new Jackson2JsonRedisSerializer<>(Object.class); serializer.setObjectMapper(objectMapper); RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(serializer); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(serializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } /** * 创建 StringRedisTemplate * * @param redisConnectionFactory redisConnectionFactory * @return StringRedisTemplate * @author zhengshangjin * created on 2020-04-23 */ public StringRedisTemplate createStringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); stringRedisTemplate.setConnectionFactory(redisConnectionFactory); return stringRedisTemplate; } /** * 创建 StringRedisTemplate * * @param host 主机 * @param port 端口 * @param password 密码 * @param database 库 * @return StringRedisTemplate * @author zhengshangjin * created on 2020-04-23 */ public StringRedisTemplate createStringRedisTemplate(String host, int port, String password, int database) { // 基本配置 RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); configuration.setHostName(host); configuration.setPort(port); configuration.setDatabase(database); if (ObjectUtils.isNotEmpty(password)) { RedisPassword redisPassword = RedisPassword.of(password); configuration.setPassword(redisPassword); } // 连接池通用配置 GenericObjectPoolConfig<?> genericObjectPoolConfig = new GenericObjectPoolConfig<>(); genericObjectPoolConfig.setMaxTotal(maxActive); genericObjectPoolConfig.setMinIdle(minIdle); genericObjectPoolConfig.setMaxIdle(maxIdle); genericObjectPoolConfig.setMaxWaitMillis(maxWait); // Lettuce Pool LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder(); builder.poolConfig(genericObjectPoolConfig); builder.commandTimeout(Duration.ofSeconds(timeout)); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, builder.build()); connectionFactory.afterPropertiesSet(); StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); stringRedisTemplate.setConnectionFactory(connectionFactory); return stringRedisTemplate; } } 注入使用   根据@Qualifier指定beanname来获取@Autowired @Qualifier("liveStringRedisTemplate") public StringRedisTemplate stringRedisTemplate;


Google算法更新外贸网站要符合移动端友好设计移动端友好是什么意思?可以看一下你的外贸网站在手机上打开是什么效果,加载缓慢?排版混乱?字体太小?弹窗关不掉?这就是一个典型的不符合移动端友好的问题网站。为什么说移动端友好非常的重独立官网才是未来,每家企业网站都值得用LTD重做一遍前不久微信10周年的微信之夜上,腾讯高级执行副总裁微信事业群总裁张小龙进行了一段演讲,其中着重强调了视频号的意义以及在未来的发展前景。他说在未来,视频会成为企业官网,正如他也曾说过不仅仅是私域,任何生意中内容即是核心,生意表达即为内容什么是私域?私域在定义上与我们熟知的互联网公域有着明显区别,相比起公域中的流量,私域可以做到更加个性化多样化的触达,其品牌和客户也更有黏性。但目前市面上的私域SaaS产品同质化情况Google将针对在英国奥地利土耳其投放广告收取新费用近日,有客户收到Google官方邮件通知表示,从11月1日起,对针对英国土耳其和奥地利投放的GoogleAds将收取新的费用。费用包括监管运营费用数字服务税费用。邮件通知如下尊敬的交流指导数字化营销新思路2021年10月27日,杭州电子商务研究院院长赵浩兴教授杭州跨境电商协会李星慧秘书长(以下简称研究院协会)一行人莅临贰贰网络(集团)进行交流指导,交流指导数字化营销新思路。在参观过在线抽奖限时秒杀拼团抢购,别的商城有的功能你也可以拥有相信不少从事电商行业的商家们都有过在大平台开店的经历吧?不管是在创业初期想要借助大平台走出第一步,或者是在有官网的前提下,还想要借助大平台的渠道获得客流量,投身于第三方大平台似乎都海外线上营销渠道如何选?哪个最值得投资?海外线上推广怎么选?作为一名外贸行业的从业者,一定心中都有自己的答案,但是推广渠道如此之多,如何把握重点,找到适合自己的推广渠道呢?今天就来和大家一起分享这个话题。首先海外线上推广3分钟遭疯抢!能追剧能健身的OPPO智能电视S1太秀了双11马上就要来了,相信很多游戏迷们都已经在各大电商平台搜游戏主机的价格了吧?不论你是打算入手PS4还是switch,额外配上一台好电视作为显示器同样很重要。而作为今年电视行业双1旗舰级耳机能不过千?OPPOEncoX做到了,而且很标杆在AirPodsProWF1000XM3等外国品牌真无线耳机盛行的当下,不少人期待国产能有一款能与之比拟的产品,而在最近OPPO智美生活发布会上,官方公布的全新的OPPOEncoX三星下一代旗舰机配置曝光,直面屏or曲面屏?你更喜欢哪个?三星发布了第二款旗舰处理器三星exynos1080,它采用5nm技术和A78g78架构。安兔兔的得分超过69万,仅比华为mate40pro的麒麟9000低5分。然而,这并不是三星的私人影院直接搬回家,OPPO智能电视S1将带来顶级视听体验随着科技的发展,智能电视的功能变得越来越丰富,进一步取代传统电视成为电视行业成为了绝对主力。10月19日,OPPO线下正式举办了OPPO智美生活发布会,其中最为之亮眼的就是OPPO
华为鸿蒙正式上线,首批升级机型出炉,系统界面焕然一新华为鸿蒙正式上线操作系统一直是国产手机的痛点问题,因为这么多年过去了,国内手机厂商用的还是来自于美国谷歌公司的安卓系统。例如大家熟知的小米MIUIOPPO的ColorOS以及viv华为Mate30Pro开启降价模式,128GB麒麟900,支持40W快充目前,华为仍处于缺芯危机中,麒麟芯片用一颗少一颗,多数华为手机都处于缺货状态。虽说物以稀为贵,但近段时间骁龙888旗舰机型密集发布,使得部分华为手机的竞争力大大削弱,不少第三方商家摆到华为门店两周,赛力斯订单直逼特斯拉?丨调查虽然距五一黄金周假期还有两天,但炎炎烈日并没能阻挡上海南京东路上游客的热情。而位于南京东路与河南中路交叉口的华为南京东路旗舰店却与往日颇为不同,一进入硕大的展厅,便能看到几台赛力斯红魔6Pro评测游戏手机的春天终于来了曾经不被看好的游戏手机,如今却成了香饽饽!光2021年扎堆上市的游戏手机就有黑鲨4系列ROG游戏手机5红魔6系列拯救者电竞手机2ProRedmiK40游戏版一加9R真我GT和iQO大量特斯拉现身停车场停摆?神马出行成都分公司确系出现故障待修的特斯拉车型超30辆特斯拉现身停车场积灰停摆,是神马出行的车?日前,红星新闻记者接到市民反映,在成都一停车场内,停放着大量停摆的特斯拉车辆,疑与2019年神马出行喊话维权称运营车辆中大量特斯拉5月5日购物节试点向消费者发放数字人民币红包在今年5月5日购物节期间,数字人民币的使用范围将进一步扩大。分析师表示,通过向消费者发放数字人民币红包或消费券,数字人民币将通过消费增长帮助提振实体经济。华东的苏州和上海将在即将到2021年新能源汽车下乡活动首站启动18家车企39个品牌共52款车型参与中证网讯(记者崔小粟)2021年4月29日,2021年新能源汽车下乡活动首站在溧阳正式启动。此次活动有18家车企39个品牌共52款车型参与。据了解,在国家购车补贴基础上,新能源企业诺基亚重回第一梯队,创造网速记录,超越华为拿下150份5G订单了解更多科技资讯尽在圈聊科技。今天跟大家聊一聊诺基亚重回第一梯队,创造新的网速记录,超越华为拿下150份5G订单。对于诺基亚大家想必都不陌生,但不知道从什么时候开始,我们熟知的手机从5499跌至4599,最廉价的5G苹果手机诞生,网友幸福来得太突然苹果能有什么事情让人感到幸福,无非就是大降价。看着现在的手机市场,竞争不是一般的激烈,安卓手机接连不断地发布,而苹果一年只有一次发布会,这方面相对要弱势一些。面对着华为小米vivo千元购机攻略,让你知道iQOOZ3realmeGTNeo红米K40哪款适合你在性能过剩的时代,千元机就已经能够满足主流用户的大部分需求,不管是性能拍照,还是续航充电,乃至颜值等,如今的千元机均有着出色的表现。和往年一样,今年的千元机市场同样迎来了不少明星机想KO却被KO,一文告诉你为何说小米K40游戏版不如realme前两天,红米正式了首款游戏手机红米K40游戏增强版。对于这款手机,红米官方多次表示不仅是游戏手机,更是可以用于当主力机使用的手机。但要想当主力机,就需要综合素质全面,而非只有游戏方