SpringBoot日记——Redis整合

  上一篇文章,简单记录了一下缓存的使用方法,这篇文章将把我们熟悉的redis整合进来。

  那么如何去整合呢?首先需要下载和安装,为了使用方便,也可以做环境变量的配置。

  下载和安装的方法,之前有介绍,在docker中的使用,这里不做相关介绍,有想在windows环境下使用的,自己搜一下如何windows安装使用redis吧~(看这里也可以

  正题:  SpringBoot对应(自带)RedisClient是不同的

  SpringBoot1.5.x版本 -> jedis 
  SpringBoot2.x版本 - > lettuce  (本文以2.x为例)

  Redis启动与应用

  启动redis服务,并打开管理客户端。其中默认的端口号,可以通过修改config来实现。

  按照如图所示的步骤,链接本地的redis,如果你是在远程服务器安装的,ip记得填写服务器的。

  选中我们做好的链接,右键打开console或者ctrl+T,打开控制台,我们来测试一下命令是否可用~

  在控制台输入命令,看一下(Redis命令点击查看

  继续输入命令,可以看到字符串会相应的做拼接,这就是追加key值的命令的作用。其他命令,自己可以去试一下~

  

  整合到SpringBoot中

  接下来,我们将这个redis整合到SpringBoot中来,首先,在pom.xml中添加

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

  1.配置redis:到配置文件中添加:(如果是远程服务器,自己替换IP)

spring.redis.host=127.0.0.1

    添加好以后我们来测试一下,首先,为了存取数据到redis中,添加如下的代码,我们接着看这两个如何使用。

    @Autowired
    StringRedisTemplate stringRedisTemplate;    // k-v都是字符串

    @Autowired
    RedisTemplate redisTemplate;    // k-v都是对象

    先看字符串的,跟之前在console中输入命令一样的作用,执行测试后,检查下redis中,确实有生成的msg,说明我们的关联和操作是成功的。

        stringRedisTemplate.opsForValue().append("msg", "Hello");  //append中添加的是两个字符串,也就是上边的k-v字符串操作

    所以,你该明白第二个k-v是对象的意思了吧?继续测试方法中这样写:(我们将查询的这个对象存到缓存中)

        Employee empById = employeeMapper.getEmpById(1);
        redisTemplate.opsForValue().set("emp-01", empById);

    来看结果:(Cannot serialize表示无法序列化,这里先看下如何处理,稍后来说为什么以及如何优化)

    我们将bean.Employee的类这样写,就可以保证基本的序列化: implements Serializable

public class Employee implements Serializable {xxxx}

    再次运行,查看结果:(运行成功了,可这一堆乱码一样的是什么呢?)

      其实默认的序列化是JDK的,我们需要自己优化一下,比如编程json的序列化。

          来看如何优化呢,我们需要自己创建一个redis的配置,来序列化我们自己想要的json格式(其实就是把RedisAutoConfiguration中的方法拿出来稍微的修改一下)

          注意,我把主程序中的@EnableCaching,放到这里了,主程序那里就不用写了?后边我们再来实验一下

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.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;

import java.time.Duration;

@Configuration
@EnableCaching
public class MyRedisConfig {

    @Bean
    public RedisCacheManager empCacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofHours(1))  // 设置缓存有效期一小时
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(
                        new GenericJackson2JsonRedisSerializer())); // 设置json格式序列化
        return RedisCacheManager
                .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
                .cacheDefaults(redisCacheConfiguration).build();
    }

}

  然后使用我们自己建立的template方法,做一个测试,看下结果:(注解证明木有问题)

        Employee empById = employeeMapper.getEmpById(1);
        employeeRedisTemplate.opsForValue().set("emp-01", empById);

  

  是不是看起来舒服多了。

  当然,如果我们针对不同的情况做不同的书写有时候也是必要的,所以也可以这样写:(new那一行,看下变化,你就知道了~),但记住,如果你有多个个性配置的时候要加入注解@Primary,这个可以让该bean作为默认的主缓存管理器来使用,不然会报错滴~

    @Bean
    public RedisCacheManager empCacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofHours(1))  // 设置缓存有效期一小时
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(
                        new Jackson2JsonRedisSerializer<Employee>(Employee.class))); // 设置json格式序列化
        return RedisCacheManager
                .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
                .cacheDefaults(redisCacheConfiguration).build();
    }

  如上,redis的简单使用就说这些,后边我可能还会把文章扩展一下,具体说说怎么使用,尽请关注~

  

  

原文地址:https://www.cnblogs.com/iceb/p/9479976.html

时间: 2024-11-07 04:34:57

SpringBoot日记——Redis整合的相关文章

6.springboot+mybatis+redis整合

选择生成的依赖 选择保存的工程路径 查询已经生成的依赖,并修改mysql的版本 1 <dependencies> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-data-redis</artifactId> 5 </dependency> 6 <dependency>

springboot+shiro+redis(单机redis版)整合教程-续(添加动态角色权限控制)

相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(单机redis版)整合教程 3. springboot+shiro+redis(集群redis版)整合教程 参考此教程前请先阅读 2.springboot+shiro+redis(单机redis版)整合教程,此教程是在其基础上进行修改添加动态角色权限的. 本教程整合环境: java8 maven redis(单机) 开发工具: idea 版本: springboot 1.5.15.RE

springboot集成redis详解

欢迎扫码加入Java高知群交流 springboot集成redis非常简单 1.引入maven依赖redis包 <!-- springboot整合 redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> 2.appli

SpringCloud+MyBatis+Redis整合—— 超详细实例(二)

2.SpringCloud+MyBatis+Redis redis是一种nosql数据库,以键值对<key,value>的形式存储数据,其速度相比于MySQL之类的数据库,相当于内存读写与硬盘读写的差别,所以常常用作缓存,用于少写多读的场景下,直接从缓存拿数据比从数据库(数据库要I/O操作)拿要快得多. 话不多说,接下来紧接上一章<SpringCloud+MyBatis+Redis整合-- 超详细实例(一)>搭建SpringCloud+MyBatis+Redis环境: 第一步:在p

SpringBoot系列——Redis

前言 Redis是一个缓存.消息代理和功能丰富的键值存储.StringBoot提供了基本的自动配置.本文记录一下springboot与redis的简单整合实例 官方文档:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-redis 前期准备 首先我们要有一个Redis服务,由于我没有Linux环境,为了方便搭建项目,直接在Windows下安装,参考这篇博客:Windo

玩转 SpringBoot 2 之整合 JWT 下篇

前言 在<玩转 SpringBoot 2 之整合 JWT 上篇> 中介绍了关于 JWT 相关概念和JWT 基本使用的操作方式.本文为 SpringBoot 整合 JWT 的下篇,通过解决 App 用户登录 Session 问题的实战操作,带你更深入理解 JWT.通过本文你还可以了解到如下内容: SpringBoot 使用拦截器的实际应用 SpringBoot 统一异常处理 SpringBoot 快速搭建 RESTful Api 关于生成JWT 操作请参考 <玩转 SpringBoot 2

SpringBoot与Redis缓存管理

这篇博客是前面https://www.cnblogs.com/shijinglu2018/p/12258646.html(SpringBoot与MyBatis/Redis整合)的延续. 为什么要使用MyBatis?为什么要使用Redis? 用MyBatis是进行java连接数据库的一种封装和简化,方便去调用,过程中不用过多去手动写如何用反射加载驱动包,如何到数据库中取得数据等,当然不可少的是需要建模和建接口,但是由于MyBaits,所以已经方便很多了:     用Redis的是因当到数据库中取数

Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz! log.latermoon.com/

springboot同mybatis整合

springboot和mybatis整合有两种开发模式,首先要做的是配置好开发环境, 实现步骤: 在maven文件pom中配置: 1)SpringBoot同Mybatis整合的依赖. <dependency> <groupId>com.ruijc</groupId> <artifactId>spring-boot-starter-mybatis</artifactId> <version>3.2.2</version> &