栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis介绍

Redis简介

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个包含多种数据结构,支持网络,基于内存,可选持久化的键值对存储数据库

Redis的优点
  1. 基于内存运行,性能高效
  2. 支持分布式,理论上可以无限扩展
  3. 丰富的数据类型
Redis安装
sudo docker pull redis:latest
sudo docker images
sudo docker run  --name redis -p 6379:6379 -d --restart=always redis:latest redis-server --appendonly yes --requirepass "Hello122342"

6379是Redis服务的端口号,Hello122342是Redis的服务密码

Spring Boot集成Redis

Spring Boot项目实际上是通过网络来使用操作Redis,客户端的主要作用是为了更好的使用Redis

常见客户端:

  1. Lettuce客户端
    高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,优势在于支持同步,异步和响应式模式多个线程可以共享一个连接实例
  2. Jedis客户端
    老牌的Redisjava实现客户端,现已不推荐使用
  3. Redisson客户端
    实现了分布式和可扩展的java数据结构,优势在于提供很多分布式相关的操作服务

SpringBoot集成Redis的步骤:

  • 引入依赖
  • 配置Redis服务器相关配置
  • 启动应用

引入依赖:


    org.springframework.boot
    spring-boot-starter-data-redis

配置Redis服务器相关配置

# Redis服务器地址
spring.redis.host=
# Redis 服务器端口号
spring.redis.port=6379
# Redis 服务器密码 (请换成自己机器密码)
spring.redis.password=

启动应用

import org.springframework.data.redis.core.StringRedisTemplate

@Controller
public class DemoController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
}
StringRedisTemplate实现发送验证码功能


验证码的存储结构比较符合key-value结构,Redis十分合适处理这种数据结构

StringRedisTemplate的用法:
例子:将手机号为13902350924收到的验证码6209存储到Redis数据库中

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;

@Controller
public class SMSCodeApi {
    //引入StringRedisTemplate
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void add() {
        stringRedisTemplate.opsForValue().set("13902350924", "6209");
    }
}

StringRedisTemplate存储的值必须是字符串

发送手机验证码功能:

@Controller
@RequestMapping("/code")
public class SMSCodeApi {
    private static Logger logger = LoggerFactory.getLogger(SMSCodeApi.class);
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @ResponseBody
    public Result send(@RequestParam("mobile") String mobile) {
        Result result = new Result<>();
        result.setSuccess(true);

        // 步骤一
        if (StringUtils.isEmpty(mobile)) {
            result.setSuccess(false);
            result.setMessage("手机号信息不能为空!");
            return result;
        }
        // 生成四位数验证码
        String code = String.valueOf((int)(Math.random() * 9 + 1) * 10000);

        //  步骤二
        // 调用第三方发送服务
        Boolean sendResult = sendMobileCode(mobile, code);
        if   (!sendResult) {
            result.setSuccess(false);
            result.setMessage("发送验证码失败!");
            return result;
        }

        // 步骤三
        // 将手机号对应验证码存储到redis里
        stringRedisTemplate.opsForValue().set(mobile, code);
        return result;
    }

    
    private boolean sendMobileCode(String mobile, String code) {
        logger.info("mobile is:" + mobile + "code is:" + code);
        return true;
    }
}

StringRedisTemplate获取功能:

@Controller
public class SMSCodeApi {
    private static Logger logger = LoggerFactory.getLogger(SMSCodeApi.class);
   //引入StringRedisTemplate
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void get() {
        String code = stringRedisTemplate.opsForValue().get("13902350924");
        logger.info("验证码为:" + code);
    }
}


校验手机验证码流程:

@Controller
@RequestMapping("/code")
public class SMSCodeApi {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @GetMapping("/verificate")
    @ResponseBody
    public Result send(@RequestParam("mobile") String mobile, @RequestParam("code") String code) {
        Result result = new Result();
        result.setSuccess(true);
        //步骤一
        if (StringUtils.isEmpty(mobile) || StringUtils.isEmpty(code)) {
            result.setSuccess(false);
            result.setMessage("手机号和验证码不能为空");
            return result;
        }
        String existCode = stringRedisTemplate.opsForValue().get(mobile);

        //步骤二
        // 取出的验证码不能为空
        if (StringUtils.isEmpty(existCode)) {
            result.setSuccess(false);
            result.setMessage("从Redis里未取出对应验证码");
            return result;
        }

        // 校验取出的验证码与参数码是否一致
        if (!existCode.equals(code)) {
            result.setSuccess(false);
            result.setMessage("手机验证码校验失败!");
            return result;
        }
        return result;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/310145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号