一、硬编码方式

1、场景

由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页数据缓存到redis中,减少数据库压力和提高访问速度。

2、RedisTemplate

Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是Spring Data Redis中对Jedis api的高度封装。

Spring Data Redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化功能,支持发布订阅,并对spring cache进行了实现。

3、 引入redis

<!-- spring boot redis缓存引入 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- lecttuce 缓存连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>

4、添加redis连接配置

spring:
redis:
host: ip
port: 端口号(默认6379)
database: 1
password: #默认为空
lettuce:
pool:
max-active: 20 #最大连接数,负值表示没有限制,默认8
max-wait: -1 #最大阻塞等待时间,负值表示没限制,默认-1
max-idle: 8 #最大空闲连接,默认8
min-idle: 0 #最小空闲连接,默认0

5、 配置Redis

/**
* 我们自定义一个 RedisTemplate,设置序列化器,这样我们可以很方便的操作实例对象。
* 否则redis自动使用对象的jdk序列化
*/
@Configuration
public class RedisConfig { @Bean
public RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {
RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());//key序列化方式
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//value序列化
redisTemplate.setConnectionFactory(connectionFactory); return redisTemplate;
}
}

6、测试redisTemplate

/**
* 查询缓存中是否存在需要的数据 hasKey
* 如果缓存中不存在则从数据库中取出数据,并将数据存入缓存 set
* 如果缓存存在则从缓存中读取数据 get
* @param ad
* @return
*/
@PostMapping("/save-test")
public R saveAd(@RequestBody Ad ad) {
// 使用RedisTemplate
ValueOperations operations = redisTemplate.opsForValue();
operations.set("index::myad", ad);
return R.ok();
} @GetMapping("/get-test/{key}")
public R getAd(@PathVariable("key")String key) {
// 使用RedisTemplate
ValueOperations operations = redisTemplate.opsForValue();
Ad ad = (Ad) operations.get(key);
return R.ok().data("ad", ad);
} @GetMapping("/delete-test/{key}")
public R removeAd(@PathVariable("key")String key) {
Boolean result = redisTemplate.delete(key);
System.out.println(result);// true
Boolean isKey = redisTemplate.hasKey(key);
System.out.println(isKey);// false
return R.ok();
}

二、 使用缓存注解

1、修改Redis配置类

配置类上添加注解 :@EnableCaching

2、添加配置Bean

@Bean
public CacheManager cacheManager(LettuceConnectionFactory connectionFactory) { RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
//过期时间600秒
.entryTtl(Duration.ofSeconds(600))
// 配置序列化
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.disableCachingNullValues(); RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory)
.cacheDefaults(config)
.build();
return cacheManager;
}

3、添加缓存注解

@Cacheable(value = "xxx", key = "'xxx'"):标注在方法上,对方法返回结果进行缓存。下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法上。

/**
* 查询缓存中是否存在需要的数据 hasKey
* 如果缓存中不存在则从数据库中取出数据,并将数据存入缓存 set
* 如果缓存存在则从缓存中读取数据 get
* @param adTypeId
* @return
*/
@Cacheable(value = "index",key = "'selectByAdTypeId'")
@Override
public List<Ad> selectByAdTypeId(String adTypeId) {
QueryWrapper<Ad> wrapper = new QueryWrapper<>();
wrapper.orderByAsc("sort");
wrapper.eq("type_id", adTypeId);
return baseMapper.selectList(wrapper);
} @Cacheable(value = "index",key = "'selectHotCourse'")
@Override
public List<Course> selectHotCourse() {
QueryWrapper<Course> courseQueryWrapper = new QueryWrapper<>();
courseQueryWrapper.orderByDesc("view_count");
courseQueryWrapper.last("limit 8");
return baseMapper.selectList(courseQueryWrapper);
} @Cacheable(value = "index",key = "'selectHotTeacher'")
@Override
public List<Teacher> selectHotTeacher() {
QueryWrapper<Teacher> courseQueryWrapper = new QueryWrapper<>();
courseQueryWrapper.orderByDesc("sort");
courseQueryWrapper.last("limit 4");
return baseMapper.selectList(courseQueryWrapper);
}

SpringBoot整合Redis案例缓存首页数据、缓解数据库压力的更多相关文章

  1. springBoot整合redis(作缓存)

    springBoot整合Redis 1,配置Redis配置类 package org.redislearn.configuration; import java.lang.reflect.Method ...

  2. SpringBoot整合Redis、mybatis实战,封装RedisUtils工具类,redis缓存mybatis数据 附源码

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

  3. Redis-基本概念、java操作redis、springboot整合redis,分布式缓存,分布式session管理等

    NoSQL的引言 Redis数据库相关指令 Redis持久化相关机制 SpringBoot操作Redis Redis分布式缓存实现 Resis中主从复制架构和哨兵机制 Redis集群搭建 Redis实 ...

  4. SpringBoot 整合 Redis缓存

    在我们的日常项目开发过程中缓存是无处不在的,因为它可以极大的提高系统的访问速度,关于缓存的框架也种类繁多,今天主要介绍的是使用现在非常流行的NoSQL数据库(Redis)来实现我们的缓存需求. Spr ...

  5. springboot整合redis缓存一些知识点

    前言 最近在做智能家居平台,考虑到家居的控制需要快速的响应于是打算使用redis缓存.一方面减少数据库压力另一方面又能提高响应速度.项目中使用的技术栈基本上都是大家熟悉的springboot全家桶,在 ...

  6. SpringBoot整合Redis、ApachSolr和SpringSession

    SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...

  7. SpringBoot整合Redis及Redis工具类撰写

            SpringBoot整合Redis的博客很多,但是很多都不是我想要的结果.因为我只需要整合完成后,可以操作Redis就可以了,并不需要配合缓存相关的注解使用(如@Cacheable). ...

  8. springboot整合redis(注解形式)

    springboot整合redis(注解形式) 准备工作 springboot通常整合redis,采用的是RedisTemplate的形式,除了这种形式以外,还有另外一种形式去整合,即采用spring ...

  9. springboot整合redis——redisTemplate的使用

    一.概述 相关redis的概述,参见Nosql章节 redisTemplate的介绍,参考:http://blog.csdn.net/ruby_one/article/details/79141940 ...

随机推荐

  1. MongoDB-基础知识学习(一)

    概述 最近mongodb在互联网的活跃度直线上升,并且我们公司也使用了mongoDB 3.6 作为生产重要的数据库,我们项目组要监控mongodb的op.log日志,在此整理以前学习的知识,为以后备份 ...

  2. Centos7安装erlang以及RabbitMQ Centos启动rabbitmq

    本文使用版本:  rabbitmq-server-3.8.3-1.el7.noarch.rpm   Centos7  erlang  22.3.1 在线安装 yum install esl-erlan ...

  3. day 21 C语

    (1).有以下程序: 执行后的输出结果是[A] (A).256,1 (B).1,256 (C).255,1 (D).256,0 (2).以下选项中与(!a==0)的逻辑值不等价的表达式是[B] (A) ...

  4. Solon 开发,二、注入或手动获取Bean

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  5. 【小问题】为啥乱搞就不行,golang没安装在系统目录下,导致go get出现"package bytes: directory "/home/ahfu/go/src/bytes" is not using a known version control system"

    想在自己的账号下安装golang开发环境,于是这样配置: wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz cd /home/ahfu ...

  6. unity3d百度语音合成mp3流转换byte[]失败

    using (Stream stream = response.GetResponseStream())         {             buffer2 = new byte[stream ...

  7. HashSet 实现类

    HashSet 实现类 通过 HashCode 判断元素是否存在,若存在则不添加,否则添加以此实现唯一性 常用方法 Modifier and Type Method and Description b ...

  8. MySql下载与安装(部署)

    一:MySQL介绍 1.MySQL简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB ...

  9. python代码加注释--6

    备注:#用来注释代码,#后面的内容会被python解释器忽略

  10. 【Vue源码学习】依赖收集

    前面我们学习了vue的响应式原理,我们知道了vue2底层是通过Object.defineProperty来实现数据响应式的,但是单有这个还不够,我们在data中定义的数据可能没有用于模版渲染,修改这些 ...