码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【突破舒适圈】在SpringBoot中配置Redis


    目录

      • 业务背景
      • 1.Redis安装
      • 2.安装 Redis 图形化管理界面
      • 3. SpringBoot配置
      • 4. 测试
        • 增
        • 删
      • 结尾

    业务背景

    前端的App、网页在登录时,或是用户在进行一些敏感操作的时候需要进行短信验证。但是在等待用户输入验证码的这段时间里,这个随机生成的验证码在后台应该存放在哪里呢?

    放在MySql数据库?可以的确是可以,但是如果用户访问量一下巨大起来,SQL读写面临高并发,会严重拖慢程序响应速度,甚至导致直接宕机。

    那放在Session里?emmm好像也不行,执行效率过低,性价比不高。在多用户访问时似乎并不能很好的承担这一重任。

    我们需要一个读写迅速,使用方便的工具。于是我们顺着思路,比磁盘读写速度更快的,那就是内存读写咯,于是Redis 数据库便浮现于脑海。

    一直想着找机会试试这个东西,今天就是个正好的机会。

    1.Redis安装

    由于是第一次使用Redis,还一头雾水,天真的以为在 Pom.xml 文件里引入依赖就可以使用了…
    直到把 Redis 的配置过程和 Mysql 联系到一起,才逐渐明白。

    首先要进行安装:(所有安装资源链接都放到文章最后了)

    下载、解压之后,配置环境变量。
    在这里插入图片描述

    然后打开控制台
    输入redis-server.exe,如果出现Redis 的界面,则代表安装成功、环境变量配置成功。
    在这里插入图片描述

    2.安装 Redis 图形化管理界面

    毕竟是Redis 新手,直观总好过抽象。图形化界面不仅可以让我们对Redis理解得更快,在操作上也会更加便捷。

    解压、安装之后。

    新建一个连接,就跟Mysql一样。
    在这里插入图片描述
    此时界面是这样的。
    在这里插入图片描述
    左边那一排就应该是“数据库”了,未来的数据应该就会存储到那里。

    3. SpringBoot配置

    现在可以开始在项目里配置了。

    首先是Pom.xml

            
                org.springframework.boot
                spring-boot-starter-data-redis
            
    
    • 1
    • 2
    • 3
    • 4

    然后是在 yml 文件中进行配置,redis是spring的直接下级目录哦。

      redis:
        #数据库索引
        database: 0
        host: 127.0.0.1
        port: 6379
        password:
        jedis:
          pool:
            #最大连接数
            max-active: 8
            #最大阻塞等待时间(负数表示没限制)
            max-wait: -1
            #最大空闲
            max-idle: 8
            #最小空闲
            min-idle: 0
            #连接超时时间
        timeout: 10000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    然后需要一个配置类,可以以后直接复制用

    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.RedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    @Configuration
    @EnableCaching
    public class RedisConfig extends CachingConfigurerSupport {
        @Bean(name = "redisTemplate")
        public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
    
            RedisTemplate redisTemplate = new RedisTemplate<>();
            //参照StringRedisTemplate内部实现指定序列化器
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            redisTemplate.setKeySerializer(keySerializer());
            redisTemplate.setHashKeySerializer(keySerializer());
            redisTemplate.setValueSerializer(valueSerializer());
            redisTemplate.setHashValueSerializer(valueSerializer());
            return redisTemplate;
        }
    
        private RedisSerializer keySerializer(){
            return new StringRedisSerializer();
        }
    
        //使用Jackson序列化器
        private RedisSerializer valueSerializer(){
            return new GenericJackson2JsonRedisSerializer();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    4. 测试

    到这里我们可以开始测试了,新建一个测试单元。

    增

    首先测试数据的新增

    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.redis.core.RedisTemplate;
    
    import org.springframework.test.context.junit4.SpringRunner;
    import java.util.concurrent.TimeUnit;
    
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class test {
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        @Test
        public void A() throws InterruptedException {
    //插入单条数据
            redisTemplate.opsForValue().set("key1", "我是新信息");
            System.out.println(redisTemplate.opsForValue().get("key1"));
    //插入单条数据(存在有效期)
            System.out.println("-----------------");
            redisTemplate.opsForValue().set("key2", "这是一条会过期的信息", 1, TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间
            System.out.println(redisTemplate.hasKey("key2"));检查key是否存在,返回boolean值  
            System.out.println(redisTemplate.opsForValue().get("key2"));
            Thread.sleep(2000);
            System.out.println(redisTemplate.hasKey("key2"));//检查key是否存在,返回boolean值  
            System.out.println(redisTemplate.opsForValue().get("key2"));
            System.out.println("-----------------");
            
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    结果
    在这里插入图片描述
    打开图形化界面验证一下,确实加进去了,过期的信息就不见了
    在这里插入图片描述

    删

    接下来我们试试删除

    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.redis.core.RedisTemplate;
    
    import org.springframework.test.context.junit4.SpringRunner;
    import java.util.concurrent.TimeUnit;
    
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class test {
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        @Test
        public void A() throws InterruptedException {
            redisTemplate.delete("key1");
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    结果发现刚刚添加的东西成功删除。
    在这里插入图片描述

    结尾

    新技能get!!继续加油!!!!

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    【漏洞库】Fastjson_1.2.47_rce
    应用在儿童平板防蓝光中的LED防蓝光灯珠
    jenkins部署springboot项目(超详细讲解)
    Ubuntu设置静态IP地址的几种方法
    网络协议的重要性与应用:理解进程间通信和网络分层结构(下)
    【学习笔记】AGC008
    竞赛 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正
    4.三种方式创建springboot项目
    19_Vue如何监测到对象类型数据发生改变的?
    python毕设选题 - 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化
  • 原文地址:https://blog.csdn.net/m0_67400972/article/details/126080814
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号