上一篇文章,简单记录了一下缓存的使用方法,这篇文章将把我们熟悉的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的简单使用就说这些,后边我可能还会把文章扩展一下,具体说说怎么使用,尽请关注~

  

  

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

  1. redis(七)---- SpringBoot和redis整合

    SpringBoot和Redis整合非常简单 添加pom依赖 <dependency> <groupId>org.springframework.boot</groupI ...

  2. springboot和Redis整合

    springboot简化了许多的配置,大大提高了使用效率.下面介绍一下和Redis整合的一些注意事项. 首先介绍单机版的redis整合. 1.第一步当然是导入依赖 <dependency> ...

  3. SpringBoot + Mybatis + Redis 整合入门项目

    这篇文章我决定一改以往的风格,以幽默风趣的故事博文来介绍如何整合 SpringBoot.Mybatis.Redis. 很久很久以前,森林里有一只可爱的小青蛙,他迈着沉重的步伐走向了找工作的道路,结果发 ...

  4. 7.springboot+mybatis+redis整合

    选择生成的依赖 选择保存的工程路径 查询已经生成的依赖,并修改mysql的版本 <dependencies> <dependency> <groupId>org.s ...

  5. SpringBoot+Redis整合

    SpringBoot+Redis整合 1.在pom.xml添加Redis依赖 <!--整合Redis--> <dependency> <groupId>org.sp ...

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

    相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(单机redis版)整合教程 3. springboot+shiro+redis(集群re ...

  7. springboot+shiro+redis(集群redis版)整合教程

    相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(单机redis版)整合教程 3.springboot+shiro+redis(单机red ...

  8. springboot+shiro+redis(单机redis版)整合教程

    相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(集群redis版)整合教程 3.springboot+shiro+redis(单机red ...

  9. springboot和Redis集群版的整合

    此篇接上一个文章springboot和Redis单机版的整合 https://www.cnblogs.com/lin530/p/12019023.html 下面接着介绍和Redis集群版的整合. 1. ...

随机推荐

  1. ubuntu下配置时间同步NTP

    1参考文献: 1.鸟哥的Linux私房菜:第十五章.时间服务器: NTP 服务器(强烈建议看完) 2.http://www.crsay.com/wiki/wiki.php/server/centos/ ...

  2. phpmyadmin 下载、安装、配置

    phpmyadmin 下载.安装.配置 phpmyadmin 下载.安装.配置 地址:https://www.phpmyadmin.net/ 点击右上角下载按钮 下载得到phpMyAdmin-4.7. ...

  3. 看代码网备份|利用WebClient|eKing.CmdDownLoadDbBakOper|实现定时拷贝数据库备份文件到文件服务器

    摘要: 1.有两台服务器 (1)看代码网(记为A):内网IP:10.186.73.30 (2)文件服务器(记为B):内网IP:10.135.87.157 2.在A架设一个网站,端口8088(防火强设置 ...

  4. 0基础的人如何入门 Python ?Python难么?

    人生苦短,我用Python,为啥这么说,因为我们自动化测试有金句:学完Python,便可上天 ~ 废话不多说,相信很多人都听过之前的Python进入小学课本.Python进入浙江省高考等新闻,有这么多 ...

  5. sql点滴45—mysql中group_concat用法

    group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组, ...

  6. 敲代码非常难之logstash之file input插件实现分析

    版权声明:本文为横云断岭原创文章,未经博主同意不得转载.微信公众号:横云断岭的专栏 https://blog.csdn.net/hengyunabc/article/details/25665877 ...

  7. BZOJ1458:士兵占领(有上下界最小流)

    Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放 ...

  8. 两个docker容器互连时,提示no route to host错误的问题

    大家都知道,两个docker container互连的时候可以用link,但是,我们也知道,container可以将自己的端口映射到宿主机上,比如一个container A上的tomcat将端口暴露给 ...

  9. python学习课件

    张鑫 18511446896 ------------------------------------------------------------------------------------- ...

  10. [转]深入理解MFC中程序框架

    最近抽空复习了一下MFC的内容,觉得一篇博文写的不错. 原文内容太多直接给出链接吧:深入理解MFC中程序框架 链接2:深入浅出话VC++(2)——MFC的本质 链接3:MFC单文档/视图结构穷追猛打