SpringBoot整合Redis之编写RedisConfig

编写RedisConfig首先我们要明白RedisConfig中需要包含什么,首先看看我们直接使用RedisTemplate的问题,我们就知道RedisConfig要包含什么了,我们在RedisConfig需要规定好根据不同的查询生成的key,key和value的序列化和反序列化

我们在RedisConfig中配置的自定义方法,最终通过注解引用的就是我们自定义的方法

RedisConfig.java   :

对redis提供的两个Template的序列化配置

/**
 * @Author: JCccc
 * @CreateTime: 2018-09-11
 * @Description:
 */
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.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;

@Configuration
@EnableCaching
public class RedisConfig {
           @Bean
        public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
            RedisCacheConfiguration cacheConfiguration =
                    defaultCacheConfig()
                            .disableCachingNullValues()
                            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer(Object.class)));
            return RedisCacheManager.builder(connectionFactory).cacheDefaults(cacheConfiguration).build();

//            RedisCacheManager rcm=RedisCacheManager.create(connectionFactory);
//
//            return rcm;

        }

        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(factory);
            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);
            //序列化设置 ,这样为了存储操作对象时正常显示的数据,也能正常存储和获取
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
            return redisTemplate;
        }
    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(factory);
        return stringRedisTemplate;
    }

}

补充

redisconfig配置与使用

配置类:

@Configuration   // 定义一个配置类
public class RedisConfig {
    //object object

    /*
    * 用于redisApi
    * */
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        // 使用JSON格式序列化对象,对缓存数据key和value进行转换
        Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
        // 解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(om);

        // 设置RedisTemplate模板API的序列化方式为JSON
        template.setDefaultSerializer(jacksonSeial);
        return template;
    }
 }

使用方式:

1. 业务类中进行注入:

@Autowired
RedisTemplate redisTemplate;

2. 使用redisTemplate的内置方法:

2.1 获取redis中的数据

Object object = redisTemplate.opsForValue().get("course_" + id);

2.2 插入数据

redisTemplate.opsForValue().set("course_" + id, course, 1, TimeUnit.DAYS);

到此这篇关于SpringBoot整合Redis之编写RedisConfig的文章就介绍到这了,更多相关SpringBoot编写RedisConfig内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2022-06-22

使用SpringBoot中整合Redis

目录 SpringBoot中整合Redis SpringBoot整合Redis改不了database问题 SpringBoot中整合Redis 本次,我们以IDEA + SpringBoot作为 Java中整合Redis的使用 的测试环境,如果对创建SpringBoot项目有不清楚的地方,可以参考这篇文章:使用Idea创建我的第一个SpringBoot项目 首先,我们需要导入Redis的maven依赖 <!-- Redis的maven依赖包 -->         <dependency

SpringBoot结合Redis实现序列化的方法详解

目录 前言 配置类 配置 Jackson2JsonRedisSerializer 序列化策略 配置  RedisTemplate 配置缓存策略 测试代码 完整代码 前言 最近在学习Spring Boot结合Redis时看了一些网上的教程,发现这些教程要么比较老,要么不知道从哪抄得,运行起来有问题.这里分享一下我最新学到的写法 默认情况下,Spring 为我们提供了一个 RedisTemplate 来进行对 Redis 的操作,但是 RedisTemplate 默认配置的是使用Java本机序列化.

解决SpringBoot下Redis序列化乱码的问题

目录 SpringBoot下Redis序列化乱码 注意问题 SpringBoot配置Redis序列化规则,防止乱码 下面我们可以编写测试类了 具体可以看下图 我们需要对它进行配置 SpringBoot下Redis序列化乱码 项目最初的序列化方案用的是JDK序列化类,但保存到redis里会产生乱码不方便查看管理. public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {         redisTem

SpringBoot中对应2.0.x版本的Redis配置详解

properties格式: # REDIS (RedisProperties) # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=localhost # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.po

SpringBoot初始教程之Servlet、Filter、Listener配置详解

1.介绍 通过之前的文章来看,SpringBoot涵盖了很多配置,但是往往一些配置是采用原生的Servlet进行的,但是在SpringBoot中不需要配置web.xml的 因为有可能打包之后是一个jar包的形式,这种情况下如何解决?SpringBoot 提供了两种方案进行解决 2.快速开始 2.1 方案一 方案一采用原生Servlet3.0的注解进行配置.@WebServlet .@WebListener.@WebFilter是Servlet3.0 api中提供的注解 通过注解可以完全代替web

IIS中使用的ISAPI_Rewrite Full版本做反向代理详解

反向代理是什么? 大家去过落伍者吧?大家可以通过IP查看落伍的IP是在韩国,大家可知道,其实落伍的数据还是在国内.如何做到这样的呢,这就叫反向代理,在韩国的服务器将http请求发送到国内服务器的某个http端口,再将回传的数据返回到韩国,发送至客户,这样就完成了网站实体在国内,看起来网站在国外. 这里说一下IIS做反向代理,实现这个功能ISAPI_Rewrite Full版本可以实现.下载ISAPI_Rewrite Full,安装. 在创建一个网站,这个网站可以用你想要的域名进行访问到,或者最直

Windows和Linux中php代码调试工具Xdebug的安装与配置详解

一.为什么需要Debugger? 很多PHP程序员调试使用echo.print_r().var_dump().printf()等,其实对 于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中,通过输出特定变量的值可以判断程序执行是否正确,甚至效率高低也可以 看出来(当然可能还需要使用一些时间函数).那么我们为什么还需要一个专门的调试程序来监控我们的程序运行呢? 这个问题的答案不妨留到后面来揭晓. 二.什么是Xdebug? Xdebug是一个开放源代码的PHP程序调试器(

Android中默认系统的声音/大小修改和配置详解

前言 声音管理系统用来实现声音的输入和输出.声音的控制和路由等功能,包括主和各种音源的音量调节.声音焦点控制,声音外设的检测和状态管理,声音源输入和输出的策略管理.音效的播放.音轨设置和播放.录音设置和启动等功能. 最近在做定制需求的时候,需要修改系统通知的声音,将其禁用掉,避免第三方应用发送通知时,声音很大吓到用户.索性就把通知声音关掉.下面就说说关闭声音的几种方法,以及修改系统默认声音的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 本文是基于Android5.1的代

Spring中的事务操作、注解及XML配置详解

事务 事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割.例如我们的转账这个业务,就需要进行数据库事务的处理. 转账中至少会涉及到两条 SQL 语句: update Acoount set balance = balance - money where id = 'A'; update Acoount set balance = balance + money where id = 'B' 上面这两条 SQL 就可以要看成是一个事务,必

springboot v2.0.3版本多数据源配置方法

本篇分享的是springboot多数据源配置,在从springboot v1.5版本升级到v2.0.3时,发现之前写的多数据源的方式不可用了,捕获错误信息如: 异常:jdbcUrl is required with driverClassName. 先来说下之前的多数据源配置如: spring: datasource: url: jdbc:sqlserver://192.168.122.111;DatabaseName=flight username: sa password: 1234.abc

C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解

初学者在学习C语言的时候,最头疼的可能就是指针,话不多说.让我们直接进入正题 直接上代码 int main(void) { int *p = 0; printf("%d", *p); system("pause"); return 0; } 直接运行,好了,程序是不是报错了?那就对了.因为此时的int *p=0实际等于int *p; p=0; 让我们来验证一下对不对 int main(void) { int *p = 0; printf("%d"

Spring Boot启动过程(六)之内嵌Tomcat中StandardHost、StandardContext和StandardWrapper的启动教程详解

StandardEngine[Tomcat].StandardHost[localhost]的启动与StandardEngine不在同一个线程中,它的start: // Start our child containers, if any Container children[] = findChildren(); List<Future<Void>> results = new ArrayList<>(); for (int i = 0; i < childre

JS中call/apply、arguments、undefined/null方法详解

a.call和apply方法详解 -------------------------------------------------------------------------------- call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指

Android xUtils更新到3.0后的基本使用规则详解

说实话,对于xUtils,是我最近才用到的开发框架(也是刚接触),对于其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是其最近更新到3.0也没有解决加载自定义ImageView报错的问题. xUtils简介 xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls 最低兼容android 2.2 (api level 8) 我总是喜欢用