Redis缓存技术应用

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis缓存技术应用

前言

大家好,一直以来我都本着 用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫


适合人群

  • 学完Java基础
  • 想通过Java快速构建web应用程序
  • 想学习或了解SpringBoot

大佬可以绕过 ~


背景

本节给大家讲讲 Java的SpringBoot框架, 之前我们学习的都是java的基础知识和底层提供的一些能力,我们日常工作都是在写接口。在我们在产品开发中,一般我们都会选择比较稳定的框架来帮我们加速开发,不会自己去造轮子,而在java众多框架中,spring框架表现的非常好,大部分公司都会首选它作为开发框架,而至今,大部分企业都是以springboot来构建项目了,一个稳健的系统需要引入稳定的技术~


情景回顾

如果你是一路看过来的,很高兴你能够耐心看完。前几期都是带大家学习了SpringBoot的基础使用以及集成mybatis开发,这也是我们写业务的基础,如果你还不熟悉这些,请先看完它们。接下来的几期内容将会带大家进阶使用,会先讲解基础中间件的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有收获,本期将会给大家讲解最热门的缓存中间件技术Redis,同样的,我们集成到Springboot中。最近github可能会被墙,所以我把源码放到了国内gitee上,本节我们依然使用上期的代码


项目源码(持续更新⭐️)


什么是Redis❓

Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。全称叫Remote Dictionary Server(远程数据服务)是由C语言编写的,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash


它本质上是一种键值对数据库,我们之前学习的mysql它是持久层的关系型数据库,而redis它的存储主要存在内存中。我们都知道在内存中的数据读取是非常快的,就好比你把一个变量存到磁盘读取和直接放到代码中运行,肯定是在代码中拿到的速度快,因为运行时期,都是直接存到内存的。


特点

给大家总结一下:

  • Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s


  • Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化


  • Redis支持主从模式,可以配置集群,这样更利于支撑起大型的项目,这也是Redis的一大亮点。


环境搭建

有了基本的概念之后,我们下面进行环境搭建,在学习阶段,安装redis很简单,生产环境一般我们也会选择云产品,一切为了服务保障,虽说它只是做缓存用,但也是系统的一把保护伞


如果你是mac用户,你可以运行如下命令:

brew install redis
复制代码


安装完成后会提示你运行命令,运行即可。


win用户也很简单,直接下载redis软件,双击运行即可,运行之后它会有一个小方块的图案,和locahost:6379的log,说明运行成功了。初始阶段没有配置的redis默认host就是本地,port就是6379, 而且是没有密码就可以访问的。


推荐一个客户端软件Redis Desktop Manager,它是redis的客户端界面软件,方便面我们学习的时候清理缓存使用,生产慎连。


Springboot集成Redis

我们不给大家讲它的基本命令使用,它也有语法,可以通过类似命令执行,如果想学习的小伙伴,可以自行搜索。本期重点内容是在sprinboot中的使用,我们平时开发不可能是去命令行里敲的,都是代码里执行,而目前市面上有很多封装好的库,我们可以直接调用它的方法,很方便的就可以操作它了,不用记一些繁琐的命令,下面我们就实际操作一下:


修改pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
复制代码


修改 application.yml:

spring:
  redis:
    host: localhost # Redis服务器地址
    database: 1 # Redis数据库索引(默认为0)
    port: 6379 # Redis服务器连接端口
    password: # Redis服务器连接密码(默认为空)
复制代码

redis默认是有16个库,不是15个啊,从0开始算的,我们随便连一个


实战

缓存数据

@RequestMapping("/redis")
@RestController
public class RedisController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @GetMapping("/set")
    public String setData() {
        String key = "data";
        stringRedisTemplate.opsForValue().set(key, "dataVal1");
        return "success";
    }
}
复制代码

通过代码很好理解, 首先需要引入StringRedisTemplate,然后需要设置一个key,那么思考一下,这个key允许重复吗❓


修改缓存

@RequestMapping("/redis")
@RestController
public class RedisController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @GetMapping("/set")
    public String setData() {
        String key = "data";
        stringRedisTemplate.opsForValue().set(key, "dataVal2");
        return "success";
    }
}
复制代码

我们进客户端看一下,发现key还是只有一个,但是值变成了新的值了,所以可以得知key是唯一的,我们重新设置的时候相当于刷新了它。


删除缓存

redis中删除缓存有两种方式,一种是自我消亡,也就是过期销毁,还有有一种是主动销毁,我们先看一下,过期时间如何设置

@GetMapping("/expire")
public String expireData() {
    String key = "data";
    if(!stringRedisTemplate.expire(key, 10, TimeUnit.SECONDS)) {
        return "fail";
    }
    return "success";
}
复制代码


我们设置了10s后过期,过完10s后发现,这个```key data``消失了。我们在看看如何主动删除

@GetMapping("/del")
public String deleteData() {
    String key = "data";
    stringRedisTemplate.delete(key);
    return "success";
}
复制代码


计数器

我们可以利用Redis做一个计数器,实现自增功能,你可以用它做网站访问统计

@GetMapping("/increment")
public Long incrementData() {
    String key = "data";
    return stringRedisTemplate.opsForValue().increment(key,1);
}
复制代码


封装成小工具吧

通常做法,我们会把它封装一下,后续使用直接引入封装好的即可,把它直接交给Springboot容器管理

@Component
public class RedisUtil {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    public void set(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }
    public String get(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }
    public boolean expire(String key, long expire) {
        return stringRedisTemplate.expire(key, expire, TimeUnit.SECONDS);
    }
    public void remove(String key) {
        stringRedisTemplate.delete(key);
    }
    public Long increment(String key, long delta) {
        return stringRedisTemplate.opsForValue().increment(key,delta);
    }
}
复制代码

其实这个类,你还可以继续进一步封装,比如约束key的规范,约束过期时间,约束数据类型等等,这一切也都是为了规范和后期维护,防止滥用缓存


使用场景

缓存的主要场景是用于解决热点数据问题,因为这些数据是访问频率比较高的,当大量的请求进来,mysql可能压力很大,这样一来,数据查询效率就很慢,用户肯不高兴等了,这样用户体验很不好。所以我们一般做法,都是把这些热点数据放到缓存里,因为缓存读取速度很快。当有新数据的时候,我们再及时更新它,一般流程是先查询缓存,查到了直接返回缓存数据,查不到再走数据库,然后再刷回缓存。


但是并发足够大的时候,还是会暴露出很多问题,比如面试常问的一些高频问题缓存雪崩、缓存穿透、缓存雪崩,这些问题后边会给大家专门讲,和如何去防范。所以总的来说,引入任何一门技术并不是万事大吉,还需我们不断的在实践中积累经验


结束语

本期到这里就结束了,总结一下,我们了解了什么是redis,以及在springboot中如何去使用它们,很简单,没什么复杂的东西。但这里想多说一点的是,缓存的设计却是很复杂的,因为工具是死的,人是活的,我们如何正确设计,需要我们在项目中不断的积累。


下期预告

我们之前教大家查询列表数据,都是所有数据返回,还没有教大家如何去做分页,下期将带大家学习一下mybatis分页插件的使用 ,下期不见不散, 关注我,不迷路~

相关文章
|
6月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
1月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
2月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
189 1
Redis专题-实战篇二-商户查询缓存
|
1月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
2月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
5月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
存储 缓存 NoSQL
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
快速学习 Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
|
缓存 NoSQL 安全
6.0Spring Boot 2.0实战 Redis 分布式缓存6.0|学习笔记
快速学习6.0Spring Boot 2.0实战 Redis 分布式缓存6.0。
532 0
6.0Spring Boot 2.0实战 Redis 分布式缓存6.0|学习笔记
|
缓存 NoSQL Redis
首页数据显示-添加 redis 缓存(3)| 学习笔记
快速学习 首页数据显示-添加 redis 缓存(3)
242 0
首页数据显示-添加 redis 缓存(3)| 学习笔记
|
缓存 NoSQL Java
首页数据显示-添加 redis 缓存(1) | 学习笔记
快速学习 首页数据显示-添加 redis 缓存(1)
324 0
首页数据显示-添加 redis 缓存(1) | 学习笔记
下一篇
oss云网关配置