1、介绍

Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。

Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。

与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

本文通过使用springDataRedis来实现对Redis的访问交互,对于下层springDataRedis封装好了Jedis、Lettuce等的API操作去访问Redis数据。对于上层的开发人员,我们只需要学习如何使用springDataRedis就可,无需关心Jedis、Lettuce等的API操作。

2、整合Redis

本文基于脚手架系列第二篇的基础上进行改造整合,有需要的同学可以根据需求自取:

springBoot+dubbo整合MyBatis-Plus - 脚手架系列(二)

本文是脚手架系列的第三篇,有兴趣的同学可以进入导航页进行学习:

从零开始duboo脚手架搭建

如果还没搭建Redis环境,快速部署可以参考下列文章:

Redis快速部署

项目分为dubbo-apidubbo-providedubbo-consumer这几个模块

        dubbo-api: 公共服务接口

        dubbo-provide: 服务提供者

        dubbo-consumer: 服务消费者

2.1 dubbo-consumer添加依赖及配置

2.1.1 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dubboscaffold</groupId><artifactId>dubbo-consumer</artifactId><version>0.0.1-SNAPSHOT</version><name>dubbo-consumer</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.3.7.RELEASE</spring-boot.version></properties><!--给子模块添加父项目,需要给出父项目pom文件路径--><parent><groupId>com.dubboscaffold</groupId><artifactId>dubboparent</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><dependencies><!--添加api依赖--><dependency><groupId>com.dubboscaffold</groupId><artifactId>dubbo-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- Redis相关 start --><!-- 实现对 Spring Data Redis 的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><!-- 去掉对 Lettuce 的依赖,因为 Spring Boot 优先使用 Lettuce 作为 Redis 客户端 --><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><!-- 引入 Jedis 的依赖,这样 Spring Boot 实现对 Jedis 的自动化配置 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency><!-- 等会示例会使用 fastjson 作为 JSON 序列化的工具 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.61</version></dependency><!-- Spring Data Redis 默认使用 Jackson 作为 JSON 序列化的工具 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- Redis相关 end--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.5.5</version></dependency><!-- 引入 Spring Boot 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- 实现对 Dubbo 的自动化配置 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>2.7.4.1</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.4.1</version></dependency><!-- 使用 Nacos 作为注册中心 --><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>1.2.1</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>2.7.4.1</version></dependency></dependencies></project>

2.1.2 application.yml

spring:application:name: dubbo-consumer# 对应 RedisProperties 类redis:host: 127.0.0.1port: 6379password: 876543 # Redis 服务器密码,默认为空。生产中,一定要设置 Redis 密码!database: 0 # Redis 数据库号,默认为 0 。timeout: 0 # Redis 连接超时时间,单位:毫秒。# 对应 RedisProperties.Jedis 内部类jedis:pool:max-active: 8 # 连接池最大连接数,默认为 8 。使用负数表示没有限制。max-idle: 8 # 默认连接数最小空闲的连接数,默认为 8 。使用负数表示没有限制。min-idle: 0 # 默认连接池最小空闲的连接数,默认为 0 。允许设置 0 和 正数。max-wait: -1 # 连接池最大阻塞等待时间,单位:毫秒。默认为 -1 ,表示不限制。
server:port: 8082# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:# Dubbo 应用配置application:name: user-service-consumer # 应用名# Dubbo 注册中心配置registry:address: nacos://127.0.0.1:8848 # 注册中心地址# Dubbo 消费者配置consumer:timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒TestService:version: 1.0.0

2.2 dubbo-provider添加依赖及配置

2.2.1 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dubboscaffold</groupId><artifactId>dubbo-provider</artifactId><version>0.0.1-SNAPSHOT</version><name>dubbo-provider</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.3.7.RELEASE</spring-boot.version></properties><!--给子模块添加父项目,需要给出父项目pom文件路径--><parent><groupId>com.dubboscaffold</groupId><artifactId>dubboparent</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><dependencies><!--添加api依赖--><dependency><groupId>com.dubboscaffold</groupId><artifactId>dubbo-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- Redis相关 start --><!-- 实现对 Spring Data Redis 的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><!-- 去掉对 Lettuce 的依赖,因为 Spring Boot 优先使用 Lettuce 作为 Redis 客户端 --><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><!-- 引入 Jedis 的依赖,这样 Spring Boot 实现对 Jedis 的自动化配置 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency><!-- 等会示例会使用 fastjson 作为 JSON 序列化的工具 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.61</version></dependency><!-- Spring Data Redis 默认使用 Jackson 作为 JSON 序列化的工具 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- Redis相关 end--><!-- mybatis-plus相关 start --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.10</version><scope>provided</scope></dependency><!-- 实现对数据库连接池的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency> <!-- 本示例,我们使用 MySQL --><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version></dependency><!-- 实现对 MyBatis Plus 的自动化配置 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency><!-- mybatis-plus相关 end --><!-- 方便等会写单元测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Dubbo Spring Cloud Starter --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><!-- 实现对 Dubbo 的自动化配置 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>2.7.4.1</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.4.1</version></dependency><!-- 使用 Nacos 作为注册中心 --><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>1.2.1</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>2.7.4.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies></project>

2.2.2 application.yml

server:port: 8081# datasource 数据源配置内容
spring:application:name: dubbo-providerdatasource:url: jdbc:mysql://127.0.0.1:3306/dubbo_master?useSSL=false&useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: root# 对应 RedisProperties 类redis:host: 127.0.0.1port: 6379password: 876543 # Redis 服务器密码,默认为空。生产中,一定要设置 Redis 密码!database: 0 # Redis 数据库号,默认为 0 。timeout: 0 # Redis 连接超时时间,单位:毫秒。# 对应 RedisProperties.Jedis 内部类jedis:pool:max-active: 8 # 连接池最大连接数,默认为 8 。使用负数表示没有限制。max-idle: 8 # 默认连接数最小空闲的连接数,默认为 8 。使用负数表示没有限制。min-idle: 0 # 默认连接池最小空闲的连接数,默认为 0 。允许设置 0 和 正数。max-wait: -1 # 连接池最大阻塞等待时间,单位:毫秒。默认为 -1 ,表示不限制。# mybatis-plus 配置内容
mybatis-plus:configuration:map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。global-config:db-config:id-type: auto # ID 主键自增logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)mapper-locations: classpath*:mapper/*.xmltype-aliases-package: com.dubboscaffold.dubboapi.entity# logging
logging:level:# dao 开启 debug 模式 mybatis 输入 sqlcn:iocoder:springboot:lab12:mybatis:mapper: debug# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:# Dubbo 应用配置application:name: user-service-provider # 应用名# Dubbo 注册中心配registry:address: nacos://127.0.0.1:8848 # 注册中心地址# Dubbo 服务提供者协议配置protocol:port: -1 # 协议端口。使用 -1 表示随机端口。name: dubbo # 使用 `dubbo://` 协议。更多协议,可见 http://dubbo.apache.org/zh-cn/docs/user/references/protocol/introduction.html 文档# Dubbo 服务提供者配置provider:timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒TestService:version: 1.0.0# 配置扫描 Dubbo 自定义的 @Service 注解,暴露成 Dubbo 服务提供者scan:base-packages: com.dubboscaffold.dubboprovider.service.impl

2.3  dubbo-api添加依赖及配置

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dubboscaffold</groupId><artifactId>dubbo-api</artifactId><version>0.0.1-SNAPSHOT</version><name>dubbo-api</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.3.7.RELEASE</spring-boot.version></properties><!--给子模块添加父项目,需要给出父项目pom文件路径--><parent><groupId>com.dubboscaffold</groupId><artifactId>dubboparent</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.10</version><scope>provided</scope></dependency><!-- Redis相关 start --><!-- 实现对 Spring Data Redis 的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><!-- 去掉对 Lettuce 的依赖,因为 Spring Boot 优先使用 Lettuce 作为 Redis 客户端 --><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><!-- 引入 Jedis 的依赖,这样 Spring Boot 实现对 Jedis 的自动化配置 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency><!-- 等会示例会使用 fastjson 作为 JSON 序列化的工具 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.61</version></dependency><!-- Spring Data Redis 默认使用 Jackson 作为 JSON 序列化的工具 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- Redis相关 end--><!-- 实现对 MyBatis Plus 的自动化配置 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies></project>

 JSONUtil

/*** JSON 工具类*/
public class JSONUtil {public static  <T> T parseObject(String text, Class<T> clazz) {return JSON.parseObject(text, clazz);}public static String toJSONString(Object javaObject) {return JSON.toJSONString(javaObject);}public static byte[] toJSONBytes(Object javaObject) {return JSON.toJSONBytes(javaObject);}}

2.4 自定义Redis配置序列化方式

我们在dubbo-api中添加配置类

RedisConfiguration

@Configuration
public class RedisConfiguration {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {// 创建 RedisTemplate 对象RedisTemplate<String, Object> template = new RedisTemplate<>();// 设置 RedisConnection 工厂。template.setConnectionFactory(factory);// 使用 String 序列化方式,序列化 KEY 。template.setKeySerializer(RedisSerializer.string());// 使用 JSON 序列化方式(库是 Jackson ),序列化 VALUE 。template.setValueSerializer(RedisSerializer.json());return template;}
}

配置 GenericJackson2JsonRedisSerializer 作为 VALUE 的序列化方式。

2.5 连接Redis测试

新增RedisController

@RestController
@RequestMapping("/redis")
public class RedisController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Autowiredprivate RedisTemplate redisTemplate;@RequestMapping("/setKeyByRedis")public void setKeyByRedis(){stringRedisTemplate.opsForValue().set("redis", "hello");}/*** 测试redis序列化*/@RequestMapping("/setEntityJsonByRedis")public void setEntityJsonByRedis(){User user = new User();user.setId(1);user.setUsername("redis");user.setDeleted(0);String key = String.format("user:%d", user.getId());redisTemplate.opsForValue().set(key, user);}@RequestMapping("/getEntityJsonByRedis")public Object getEntityJsonByRedis() {String key = String.format("user:%d", 1);Object value = redisTemplate.opsForValue().get(key);System.out.println(value);return value;}
}

测试

能查到值就说明和redis的整合没问题了,剩下的两个大家可以试试,接下来我们把redis的基本读写操作封装。

2.6 dubbo-api新增redis接口

    User selectByIdRedis(Integer id);void insertByIdRedis(Integer id,User user);

2.7 dubbo-provider添加redisDao,及实现方法

 RedisDao

@Repository
public class RedisDao {@Resource(name = "redisTemplate")@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")private ValueOperations<String, String> operations;private static final String KEY_PATTERN = "user:%d";private static String buildKey(Integer id) {return String.format(KEY_PATTERN, id);}public User get(Integer id) {String key = buildKey(id);String value = operations.get(key);return JSONUtil.parseObject(value, User.class);}public void set(Integer id, User user) {String key = buildKey(id);String value = JSONUtil.toJSONString(user);operations.set(key, value);}
}

UserServiceImpl

    @Autowiredprivate RedisDao redisDao;@Overridepublic User selectByIdRedis(Integer id) {return redisDao.get(id);}@Overridepublic void insertByIdRedis(Integer id,User user) {redisDao.set(id,user);}

2.8 dubbo-consumer添加redis测试入口

 UserController

    @RequestMapping("/selectByIdRedis")public User selectByIdRedis(Integer id){return userService.selectByIdRedis(id);}@RequestMapping("/insertByIdRedis")public void insertByIdRedis(String username,Integer id){User user = new User();user.setUsername(username);user.setPassword("123");user.setCreateTime(new Date());user.setDeleted(0);user.setId(id);userService.insertByIdRedis(user.getId(),user);}

3、测试

这样就完成了redis的新增及查询 。

springBoot+dubbo整合Redis - 脚手架系列(三)相关推荐

  1. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  2. SpringBoot+Dubbo整合

    说明: 由于此文章是博主2017年学习时写的文章,项目dubbo版本过低,新项目不应该继续采用此版本.阿里巴巴已经将dubbo重新维护并捐给Apache开源组织,新起了比较新版本的项目整合.学习整合的 ...

  3. springboot:整合redis之消息队列

    文章目录 springboot:整合redis之消息队列 一.项目准备 二.配置类 三.redis中list数据类型 定时器监听队列 运行即监控队列 四.发布/订阅模式 RedisConfig中添加监 ...

  4. Springboot:整合redis对接口数据进行缓存

    文章目录 Springboot:整合redis对接口数据进行缓存 一.注解及其属性介绍 @Cacheable @CacheEvict @CachePut @CacheConfig 二.代码实现 1.创 ...

  5. 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门

    概述 使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 . RedisTem ...

  6. Redis(五)整合:SpringBoot如何整合Redis?

    前言 SpringBoot应该不用过多介绍了吧!是Spring当前最火的一个框架,既然学习了Redis,我们肯定是要在实际项目中使用,那么肯定首选整合SpringBoot啦! 简单介绍下SpringB ...

  7. SpringBoot之整合Redis分析和实现-基于Spring Boot2.0.2版本

    一.背景介绍 公司最近的新项目在进行技术框架升级,基于的Spring Boot的版本是2.0.2,整合Redis数据库.网上基于2.X版本的整个Redis少之又少,中间踩了不少坑,特此把整合过程记录, ...

  8. SpringBoot:整合Redis(概述,数据类型,持久化,RedisTemplate)

    1,Redis概述 1.1,Redis基本概念 在传统的Java Web项目中,使用数据库进行存储数据,但是有一些致命的弊端,这些弊端主要来自于性能方面.比如一些商品抢购的场景,或者是主页访问量瞬间较 ...

  9. Springboot项目整合redis集群

    文章目录 1.redis集群搭建 详情见: https://blog.csdn.net/qq_45076180/article/details/103026150 2.springboot整合redi ...

最新文章

  1. Mobile3DRecon:手机上的实时单眼3D重建
  2. 山西电大统考英语和计算机试题,2017年电大统考计算机试题及答案.doc
  3. linux内核主要功能模块不包括,嵌入式linux(贺丹丹等编著)课后习题答案
  4. Java入门之初识设计模式---单列模式
  5. AB1601低功耗注意事项
  6. mysql key_block_size_Mysql入门mysql Key_buffer_size参数的优化设置
  7. JavaFX 8 教程 (中文)
  8. xfce4自己使用的主题设置备份以及xfce4默认的壁纸路径
  9. 剑网服务器维护,12月31日服务器例行维护公告
  10. caffe caffe.cpp 程序入口分析
  11. Java基础学习总结(115)——Java 类加载机制详解
  12. stringstream 字符串的格式化数据提取
  13. centos7.2下搭建postfix++dovecot+courier-authlib+extmail邮件收发系统
  14. 高版本SDK编译生成的apk放入低版本android源码中集成编译
  15. 基于北洋PT站表结构分析以及ORM重写
  16. CentOS7下docker服务无法启动的一般检查
  17. 光栅(Raster)性能优化
  18. 台式计算机的配置怎么看,台式电脑配置怎么看
  19. Cannot load C:\Users\12778\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\c0cf5d96-4221-48ee-b343
  20. 《TiDB 6.x in Action》发布,凝聚社区集体智慧的 6.x 实践汇总!

热门文章

  1. 计算机等级考试基础部分试题,计算机等级考试基础部分试题.docx
  2. Linux磁盘命令之lsblk命令
  3. excel变异系数CV怎么算
  4. 小程序源码:王者荣耀吃鸡气泡等等头像框DIY在线生成N种风格
  5. Service-黑名单来电自动挂断
  6. mysql安装配置教程
  7. Chrome - JavaScript调试技巧总结(浏览器调试JS)
  8. htc服务器更新系统,没放弃!HTC向3年前老机型推送最新系统更新
  9. 3个月带货5000万,那些隐藏在小众赛道的“大生意”
  10. C++与C#难以抉择