当前位置: 首页 > article >正文

黑马点评Redis笔记

黑马点评Redis笔记

Redis基础篇:https://cyborg2077.github.io/2022/10/21/RedisBasic/
Redis实战篇:https://cyborg2077.github.io/2022/10/22/RedisPractice/

一、手机号+验证码注册登录

RandomUtil

生成定长随机数列
String code = RandomUtil.randomNumbers(6);

返回类型约定

public class Result {
    private Boolean success;
    private String errorMsg;
    private Object data;
    private Long total;

    public static Result ok(){
        return new Result(true, null, null, null);
    }
    public static Result ok(Object data){
        return new Result(true, null, data, null);
    }
    public static Result ok(List<?> data, Long total){
        return new Result(true, null, data, total);
    }
    public static Result fail(String errorMsg){
        return new Result(false, errorMsg, null, null);
    }
}

正则类

校验手机号

RegexUtils.isPhoneInvalid(phone);
public class RegexUtils {
    /**
     * 是否是无效手机格式
     * @param phone 要校验的手机号
     * @return true:符合,false:不符合
     */
    public static boolean isPhoneInvalid(String phone){
        return mismatch(phone, RegexPatterns.PHONE_REGEX);
    }
    /**
     * 是否是无效邮箱格式
     * @param email 要校验的邮箱
     * @return true:符合,false:不符合
     */
    public static boolean isEmailInvalid(String email){
        return mismatch(email, RegexPatterns.EMAIL_REGEX);
    }

    /**
     * 是否是无效验证码格式
     * @param code 要校验的验证码
     * @return true:符合,false:不符合
     */
    public static boolean isCodeInvalid(String code){
        return mismatch(code, RegexPatterns.VERIFY_CODE_REGEX);
    }

    // 校验是否不符合正则格式
    private static boolean mismatch(String str, String regex){
        if (StrUtil.isBlank(str)) {
            return true;
        }
        return !str.matches(regex);
    }
}

ThreadLocal工具类

public class UserHolder {
    private static final ThreadLocal<UserDTO> tl = new ThreadLocal<>();

    public static void saveUser(UserDTO user){
        tl.set(user);
    }

    public static UserDTO getUser(){
        return tl.get();
    }

    public static void removeUser(){
        tl.remove();
    }
}

BeanUtil使用

属性拷贝BeanUtil.copyProperties
UserDTO userDTO = BeanUtil.copyProperties(user, UserDTO.class);
对象转哈希BeanUtil.beanToMap
Map<String, Object> userMap = BeanUtil.beanToMap(userDTO, new HashMap<>(),
        CopyOptions.create()
                .setIgnoreNullValue(true)
                .setFieldValueEditor((fieldName, fieldValue) -> fieldValue.toString()));

随机生成token

String token = UUID.randomUUID().toString(true);

Redis存登录信息

String tokenKey = LOGIN_USER_KEY + token;
stringRedisTemplate.opsForHash().putAll(tokenKey, userMap);
// 7.4.设置token有效期
stringRedisTemplate.expire(tokenKey, LOGIN_USER_TTL, TimeUnit.MINUTES);

二、缓存

字符串工具StrUtil

StrUtil.isNotBlank(shopJson)

Json工具JSONUtil

Json字符串转对象

String shopJson = stringRedisTemplate.opsForValue().get(key);
Shop shop = JSONUtil.toBean(shopJson, Shop.class);

对象转Json字符串

JSONUtil.toJsonStr(shop)

缓存穿透

缓存雪崩

缓存击穿

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/146875.html

相关文章:

  • ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技
  • 用 Python 从零开始创建神经网络(十九):真实数据集
  • 任务调度系统Quartz.net详解2-Scheduler、Calendar及Listener
  • sql模糊关联匹配
  • 关于使用FastGPT 摸索的QA
  • 初步了解JSON的基础概念
  • java springboot测试类Transactional解决 测试过程中在数据库留下测试数据问题
  • ArgoCD基本组件
  • 基于Hadoop的区块链海量数据存储的设计与实现
  • 【开源】基于Vue和SpringBoot的食品生产管理系统
  • vr小鼠虚拟解剖实验教学平台减少了受感染风险
  • 【华为OD题库-038】支持优先级的对列-java
  • CountDownLatch和CyclicBarrier源码详解
  • 计算机毕业设计 基于SpringBoot的无人智慧超市管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解+答疑
  • android基于UDP实现聊天小功能
  • 计算机毕业设计|基于SpringBoot+MyBatis框架的仿天猫商城购物系统设计与实现
  • 第1章 爬虫基础
  • B树与B+树的对比
  • 树的序列化与反序列化
  • 自建CA实战之 《0x01 Nginx 配置 https单向认证》
  • C#线程 ConcurrentQueue安全队列介绍
  • Redis-性能优化
  • 视频号小店是什么?新手入驻需要什么条件?一篇详解!
  • tp8 使用rabbitMQ(1)简单队列
  • 企业联系方式真的那么难获取吗?
  • 力扣6:N字形变化