创建 Spring Boot 项目

在线创建方式

网址:https://start.spring.io/

然后创建Controller、Mapper、Service包

  1. SpringBoot整合Redis
    引入Redis依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

完整pom.xml

<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.cyb</groupId><artifactId>chenyb-mobile-redis</artifactId><version>0.0.1-SNAPSHOT</version><name>chenyb-mobile-redis</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-test</artifactId><scope>test</scope></dependency><!--SpringBoot与Redis整合依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

设置Redis的Template

RedisConfig.java

/*** @ClassName:RedisConfig* @Description:Redis配置类* @Author:chenyb* @Date:2020/8/16 11:48 下午* @Versiion:1.0*/
@Configuration //当前类为配置类
public class RedisConfig {@Bean //redisTemplate注入到Spring容器public RedisTemplate<String,String> redisTemplate(RedisConnectionFactory factory){RedisTemplate<String,String> redisTemplate=new RedisTemplate<>();RedisSerializer<String> redisSerializer = new StringRedisSerializer();redisTemplate.setConnectionFactory(factory);//key序列化redisTemplate.setKeySerializer(redisSerializer);//value序列化redisTemplate.setValueSerializer(redisSerializer);//value hashmap序列化redisTemplate.setHashKeySerializer(redisSerializer);//key hashmap序列化redisTemplate.setHashValueSerializer(redisSerializer);return redisTemplate;}
}

设置Redis连接信息

连接的那个数据库
spring.redis.database=0
redis服务的ip地址
spring.redis.host=192.168.199.142
redis端口号
spring.redis.port=6379
redis的密码,没设置过密码,可为空
spring.redis.password=12345678

Redis工具类

redisTemplate API
1.opsForValue -> String
2.opsForSet -> Set
3.opsForHash -> hash
4.opsForZset -> SortSet
5.opsForList -> list队列
RedisUtils.java

package com.cyb.mobile.utils;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Service;import java.io.Serializable;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;/*** @ClassName:RedisUtils* @Description:Redis工具类* @Author:chenyb* @Date:2020/8/17 12:05 上午* @Versiion:1.0*/
@Service
public class RedisUtils {@Autowiredprivate RedisTemplate redisTemplate;private static double size = Math.pow(2, 32);/*** 写入缓存** @param key* @param offset 位 8Bit=1Byte* @return*/public boolean setBit(String key, long offset, boolean isShow) {boolean result = false;try {ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();operations.setBit(key, offset, isShow);result = true;} catch (Exception e) {e.printStackTrace();}return result;}/*** 写入缓存** @param key* @param offset* @return*/public boolean getBit(String key, long offset) {boolean result = false;try {ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();result = operations.getBit(key, offset);} catch (Exception e) {e.printStackTrace();}return result;}/*** 写入缓存** @param key* @param value* @return*/public boolean set(final String key, Object value) {boolean result = false;try {ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();operations.set(key, value);result = true;} catch (Exception e) {e.printStackTrace();}return result;}/*** 写入缓存设置时效时间** @param key* @param value* @return*/public boolean set(final String key, Object value, Long expireTime) {boolean result = false;try {ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();operations.set(key, value);redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);result = true;} catch (Exception e) {e.printStackTrace();}return result;}/*** 批量删除对应的value** @param keys*/public void remove(final String... keys) {for (String key : keys) {remove(key);}}/*** 删除对应的value** @param key*/public void remove(final String key) {if (exists(key)) {redisTemplate.delete(key);}}/*** 判断缓存中是否有对应的value** @param key* @return*/public boolean exists(final String key) {return redisTemplate.hasKey(key);}/*** 读取缓存** @param key* @return*/public Object get(final String key) {Object result = null;ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();result = operations.get(key);return result;}/*** 哈希 添加** @param key* @param hashKey* @param value*/public void hmSet(String key, Object hashKey, Object value) {HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();hash.put(key, hashKey, value);}/*** 哈希获取数据** @param key* @param hashKey* @return*/public Object hmGet(String key, Object hashKey) {HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();return hash.get(key, hashKey);}/*** 列表添加** @param k* @param v*/public void lPush(String k, Object v) {ListOperations<String, Object> list = redisTemplate.opsForList();list.rightPush(k, v);}/*** 列表获取** @param k* @param l* @param l1* @return*/public List<Object> lRange(String k, long l, long l1) {ListOperations<String, Object> list = redisTemplate.opsForList();return list.range(k, l, l1);}/*** 集合添加** @param key* @param value*/public void add(String key, Object value) {SetOperations<String, Object> set = redisTemplate.opsForSet();set.add(key, value);}/*** 集合获取** @param key* @return*/public Set<Object> setMembers(String key) {SetOperations<String, Object> set = redisTemplate.opsForSet();return set.members(key);}/*** 有序集合添加** @param key* @param value* @param scoure*/public void zAdd(String key, Object value, double scoure) {ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();zset.add(key, value, scoure);}/*** 有序集合获取** @param key* @param scoure* @param scoure1* @return*/public Set<Object> rangeByScore(String key, double scoure, double scoure1) {ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();redisTemplate.opsForValue();return zset.rangeByScore(key, scoure, scoure1);}//第一次加载的时候将数据加载到redis中public void saveDataToRedis(String name) {double index = Math.abs(name.hashCode() % size);long indexLong = new Double(index).longValue();boolean availableUsers = setBit("availableUsers", indexLong, true);}//第一次加载的时候将数据加载到redis中public boolean getDataToRedis(String name) {double index = Math.abs(name.hashCode() % size);long indexLong = new Double(index).longValue();return getBit("availableUsers", indexLong);}/*** 有序集合获取排名** @param key 集合名称* @param value 值*/public Long zRank(String key, Object value) {ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();return zset.rank(key,value);}/*** 有序集合获取排名** @param key*/public Set<ZSetOperations.TypedTuple<Object>> zRankWithScore(String key, long start,long end) {ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();Set<ZSetOperations.TypedTuple<Object>> ret = zset.rangeWithScores(key,start,end);return ret;}/*** 有序集合添加** @param key* @param value*/public Double zSetScore(String key, Object value) {ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();return zset.score(key,value);}/*** 有序集合添加分数** @param key* @param value* @param scoure*/public void incrementScore(String key, Object value, double scoure) {ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();zset.incrementScore(key, value, scoure);}/*** 有序集合获取排名** @param key*/public Set<ZSetOperations.TypedTuple<Object>> reverseZRankWithScore(String key, long start,long end) {ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();Set<ZSetOperations.TypedTuple<Object>> ret = zset.reverseRangeByScoreWithScores(key,start,end);return ret;}/*** 有序集合获取排名** @param key*/public Set<ZSetOperations.TypedTuple<Object>> reverseZRankWithRank(String key, long start, long end) {ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();Set<ZSetOperations.TypedTuple<Object>> ret = zset.reverseRangeWithScores(key, start, end);return ret;}
}

控制层

RedisController.java

/*** @ClassName:TestController* @Description:Redis控制器* @Author:chenyb* @Date:2020/8/17 12:07 上午* @Versiion:1.0*/
@RestController
public class RedisController {@Autowiredprivate RedisUtils redisUtils;@RequestMapping("setAndGet")public String test(String k,String v){redisUtils.set(k,v);return (String) redisUtils.get(k);}
}

测试

2. SpringBoot整合Mybatis
添加依赖

<!--mybatis依赖-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version>
</dependency>
<!--mysql驱动-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
<!--druid-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.23</version>
</dependency>

完整pom.xml

<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.cyb</groupId><artifactId>chenyb-mobile-redis</artifactId><version>0.0.1-SNAPSHOT</version><name>chenyb-mobile-redis</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-test</artifactId><scope>test</scope></dependency><!--SpringBoot与Redis整合依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--mybatis依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.23</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

设置配置文件
application.properties

连接的那个数据库
spring.redis.database=0
redis服务的ip地址
spring.redis.host=192.168.199.142
redis端口号
spring.redis.port=6379
redis的密码,没设置过密码,可为空
spring.redis.password=12345678
端口号
server.port=8081
数据库相关配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/nba?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
使用阿里巴巴druid数据源,默认使用自带
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
开启控制台打印sql
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis 下划线转驼峰配置,两者都可以
mybatis.configuration.mapUnderscoreToCamelCase=true
mybatis.configuration.map-underscore-to-camel-case=true
配置扫描
mybatis.mapper-locations=classpath:mapper/*.xml
实体类所在的包别名
mybatis.type-aliases-package=com.cyb.mobile.domain

启动类上添加扫描路径

NbaPlayer.java(实体类)

NbaPlayerMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cyb.mobile.mapper.NbaPlayerMapper"><select id="ListNbaPlayer" resultType="NbaPlayer">SELECT * FROM nba_player</select>
</mapper>

NbaPlayerMapper.java

NbaPlayerService.java

NbaPlayerServiceImpl.java

控制器(Controller)

测试

3. redis作为mybatis缓存

用户第一次访问的时候获取数据库的值,再次访问时直接从缓存中获取数据
设置缓存过期时间
代码演示

添加FastJSON依赖

<!--fastjson依赖-->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version>
</dependency>
@RequestMapping("test")
public Object test(){//step1 先从redis中取String strJson=(String) redisUtils.get("nbaPlayerCache");if (strJson==null){System.out.println("从db取值");// step2如果拿不到则从DB取值List<NbaPlayer> listNbaPlayer=nbaPlayerService.ListNbaPlayer();// step3 DB非空情况刷新redis值if (listNbaPlayer!=null){redisUtils.set("nbaPlayerCache", JSON.toJSONString(listNbaPlayer));return listNbaPlayer;}return null;}else{System.out.println("从redis缓存取值");return JSONObject.parseArray(strJson,NbaPlayer.class);}
}

注意
项目8080是对外端口(向外部暴露的端口),区别于内部进程号,查内部端口用ps -ef|grep port,查外部端口用lsof -i:port

4. 压测工具
上面我们已经SpringBoot整合Redis和Mybatis,但是无法知道具体QPS多少,此时我们可以使用压测工具来测压,参考:
https://www.cnblogs.com/chenyanbin/p/13332068.html
5. 资料下载
链接: 链接: https://pan.baidu.com/s/1_KBAsAcr5c2oujYrnHpTnQ 密码: id15

作者:陈彦斌
cnblogs.com/chenyanbin/p/13515268.html

总结了一些2020年的面试题,这份面试题的包含的模块分为19个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web异常、网络、设计模式、Spring/Spring MVC、Spring Boot/SpringCloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 。

获取以下资料:关注公众号:【有故事的程序员】,获取学习资料。
记得点个关注+评论哦~

Spring Boot实战:整合Redis、MyBatis,封装RedisUtils工具类相关推荐

  1. Spring Boot 2 整合Redis哨兵模式

    Spring Boot 2 整合Redis哨兵模式除了配置稍有差异,其它与整合单实例模式类似,配置示例为 1. pom  文件 <parent><groupId>org.spr ...

  2. SpringBoot整合Redis+mybatis,封装RedisUtils工具类等实战(附源码)

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 作者:陈彦斌 cnblogs.com/chenyanbin/ ...

  3. SpringBoot实战:整合Redis、mybatis,封装RedisUtils工具类等(附源码)

    创建SpringBoot项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redis 引 ...

  4. SpringBoot实战:整合Redis、mybatis,封装RedisUtils工具类等

    创建SpringBoot项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redis 引 ...

  5. spring boot (整合redis)

    一.application.yml配置 二.RedisService 配置 package com.example.song.service; import javax.annotation.Reso ...

  6. Spring boot 实战指南(二):Mybatis、动态绑定、多数据源、分页插件、Mybatis-Plus

    文章目录 一.整合Mybatis 1.搭建数据库环境 2.基于注解整合Mybatis (1)创建项目 (2)具体代码实现 (3)测试 3.基于xml整合Mybatis 4.Mybatis的动态SQL ...

  7. RedisUtils工具类

    本文来说下RedisUtils工具类 文章目录 概述 SpringBoot整合Redis redis操作5种常见的数据类型 概述 Spring Boot实战:整合Redis.MyBatis,封装Red ...

  8. Spring Boot 实战 —— MyBatis(注解版)使用方法

    原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...

  9. Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库

    前言 最近在做阅读类的业务,需要记录用户的PV,UV: 项目状况:前期尝试业务阶段: 特点: 快速实现(不需要做太重,满足初期推广运营即可) 快速投入市场去运营 收集用户的原始数据,三要素: 谁 在什 ...

最新文章

  1. pandas使用argmax函数返回给定series对象中最大值(max、maximum)的行索引实战
  2. berkeley db mysql_BDB:源自 Berkeley DB,事务型数据库
  3. [计算机网络] 【谢希仁】考前突击复习二、三、四章
  4. HarmonyOS之应用开发的电话服务与蜂窝网络
  5. 讲php fpm的书,细说PHP-fpm
  6. C和指针之函数之可变参数
  7. 22_IO_第22天(File、递归)_讲义
  8. 【数据结构与算法】二叉树结点最小深度求解算法
  9. 装饰者模式-继承模式和接口模式
  10. 华为机试HJ12:字符串反转
  11. 【学校集训】【USACO15DecG】Bessie's Dream
  12. VMware vCenter Server安装与配置
  13. 如何在 R 中计算 线性模型 SST、SSR 和 SSE
  14. springboot+vue3+微信小程序活动报名系统源码
  15. Java8新特性详解
  16. linux下测硬盘读写速率,linux下测试硬盘读写速度 互联网技术圈 互联网技术圈
  17. “我们检测到您之前将硬盘移动到新的DS3617xs。如果您要现在还原数据和设置,请单击“还原” 解决办法
  18. 微信小程序npm安装有赞UI 组件库
  19. CreateProcess并隐藏窗口
  20. 域名续费如何省钱?将域名转入阿里云的一次操作过程

热门文章

  1. django常见启动报错总结
  2. USB Server 第四代产品全新面市
  3. 第六届“NOI与中小学计算机教育”论坛举办通知
  4. 手写Promise和all、race等方法,附上原理解析
  5. fair share用法
  6. STM32使用9bit SPI驱动LCD
  7. 黑马android29期,黑马57期
  8. Elasticsearch 7.4.0官方文档操作
  9. MFC LPCTSTR
  10. 一些觉得有裨益的书籍的电子版---------永久更新