摘要: 什么是缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在, 这样缓存永远不会生效,这些请求都会打到数据库。 shop实体对应的数据库中表tb_shop 字段有 id name type等 typeid(有索引) public Shop querywithchuantou(Long id 阅读全文
posted @ 2025-04-12 23:06 kuki' 阅读(61) 评论(0) 推荐(0)
摘要: 什么是缓存击穿 缓存击穿问题也叫热点Key问题, 就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了, 无数的请求访问会在瞬间给数据库带来巨大的冲击。 店铺查询 + 互斥锁的逻辑图 public Shop querywithjichuan_mutex(Long id) 逻辑 1. 先根据k 阅读全文
posted @ 2025-04-12 22:51 kuki' 阅读(122) 评论(0) 推荐(0)
摘要: 文档地址 https://plus.hutool.cn/apidocs/ Class JSONUtil public class JSONUtil extends Object JSON工具类 toBean public static T toBean(JSONObject json, Class 阅读全文
posted @ 2025-04-12 22:29 kuki' 阅读(501) 评论(0) 推荐(0)
摘要: <img src="https://img2024.cnblogs.com/blog/3214105/202504/3214105-20250412203844206-1650968827.png" width="300" style="display: block; margin: auto;" 阅读全文
posted @ 2025-04-12 20:41 kuki' 阅读(9) 评论(0) 推荐(0)
摘要: 整体思路:更新数据时更新数据库并删除缓存,查询时更新缓存,无效写操作较少 public Result update(Shop shop)的逻辑 写在前面 shop.getId() 的调用依赖于 Shop 类中存在名为 id 的字段。如果 Shop 类使用了 Lombok 的 @Data 注解,并且包 阅读全文
posted @ 2025-04-12 20:14 kuki' 阅读(35) 评论(0) 推荐(0)
摘要: 文档地址 https://baomidou.com/guides/data-interface/#update 简介 updateById(shop) 是 MyBatis-Plus 提供的一个便捷方法,用于根据实体对象的主键 ID 更新对应的数据库记录。 为什么传入 shop 就可以? 在 MyBa 阅读全文
posted @ 2025-04-12 20:08 kuki' 阅读(375) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/InterceptorRegistration.html C 阅读全文
posted @ 2025-04-12 18:38 kuki' 阅读(15) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/InterceptorRegistry.html Class 阅读全文
posted @ 2025-04-12 18:36 kuki' 阅读(62) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html Interfac 阅读全文
posted @ 2025-04-12 18:30 kuki' 阅读(14) 评论(0) 推荐(0)
摘要: 1. 将python 重定向到python3 注意python3的路径以你自己的为准 sudo ln -s /usr/bin/python3 /usr/local/bin/python 查看python3的命令 which python3 2. 修改zsh中的path 执行 vim ~/.zshrc 阅读全文
posted @ 2025-04-12 18:24 kuki' 阅读(120) 评论(0) 推荐(0)
摘要: RefreshTokenInterceptor的优先级设置为0,最高 LoginInterceptor @Configuration /** * @Configuration 注解 * @Configuration:标识该类是一个配置类,Spring 在启动时会自动加载并应用其中的配置。 */ pu 阅读全文
posted @ 2025-04-12 17:41 kuki' 阅读(77) 评论(0) 推荐(0)
摘要: 逻辑 下图第二个拦截器 preHandle 查询当前线程的ThreadLocal中的userDTO信息,有则放行 否则返回401未授权 afterCompletion 销毁ThreadLocal public class LoginInterceptor implements HandlerInte 阅读全文
posted @ 2025-04-12 17:36 kuki' 阅读(88) 评论(0) 推荐(0)
摘要: 在 RefreshTokenInterceptor 中使用 ThreadLocal(通过 UserHolder.saveUser(userDTO))的主要目的是在一次 HTTP 请求的整个处理过程中,方便地在各个组件中访问当前用户的信息,而无需显式地传递用户对象。 🧩 为什么使用 ThreadLo 阅读全文
posted @ 2025-04-12 17:23 kuki' 阅读(42) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html Class ThreadLocal public class ThreadLocal extends Object 此类提供线程局部变量。这些变量与普通 阅读全文
posted @ 2025-04-12 16:39 kuki' 阅读(21) 评论(0) 推荐(0)
摘要: 逻辑步骤 preHandle()方法 1. 获取request中的token String token = request.getHeader("authorization"); 2. token非空,则基于token获取Redis(Hash数据结构)中的userMap即用户数据 key为"logi 阅读全文
posted @ 2025-04-12 16:21 kuki' 阅读(66) 评论(0) 推荐(0)
摘要: 文档地址 https://plus.hutool.cn/apidocs/ fillBeanWithMap public static T fillBeanWithMap(Map map, T bean, boolean isIgnoreError) 使用Map填充Bean对象 Type Parame 阅读全文
posted @ 2025-04-12 16:17 kuki' 阅读(56) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/HashOperations.html#entries(H) entries Map<HK,HV> e 阅读全文
posted @ 2025-04-12 16:12 kuki' 阅读(14) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html preHandle default boolea 阅读全文
posted @ 2025-04-12 15:54 kuki' 阅读(54) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html Interface HandlerInterce 阅读全文
posted @ 2025-04-12 15:49 kuki' 阅读(49) 评论(0) 推荐(0)
摘要: login逻辑 1. 输入邮箱 + 验证码,校验邮箱格式 接受的输入为 邮箱: phone 用户输入的验证码:code 这里只用工具类检查邮箱格式(仅判空) 2. 检查验证码是否一致 1.从Redis中取出key"login:code:"+phone对应的value(字符串)。 String Cac 阅读全文
posted @ 2025-04-12 14:49 kuki' 阅读(47) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisTemplate.html#delete(java.util.Collection) del 阅读全文
posted @ 2025-04-12 14:42 kuki' 阅读(18) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/HashOperations.html#putAll(H,java.util.Map) putAll 阅读全文
posted @ 2025-04-12 14:16 kuki' 阅读(20) 评论(0) 推荐(0)
摘要: 文档地址 https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisTemplate.html#opsForHash() opsForHash public < 阅读全文
posted @ 2025-04-12 14:09 kuki' 阅读(17) 评论(0) 推荐(0)
摘要: 文档地址 https://plus.hutool.cn/apidocs/ Class BeanUtil public class BeanUtil extends Object Bean工具类 把一个拥有对属性进行set和get方法的类,我们就可以称之为JavaBean。 copyPropertie 阅读全文
posted @ 2025-04-12 13:47 kuki' 阅读(452) 评论(0) 推荐(0)
摘要: 文档地址 https://plus.hutool.cn/apidocs/ Class UUID public class UUID extends Object implements Serializable, Comparable 提供通用唯一识别码(universally unique iden 阅读全文
posted @ 2025-04-12 13:26 kuki' 阅读(239) 评论(0) 推荐(0)
摘要: 代码: String token = UUID.randomUUID().toString(); 用于生成一个全局唯一的字符串标识符(UUID),并将其赋值给变量 token。 详细解析 UUID.randomUUID() 这是 hutool工具类 提供的静态方法,用于生成一个类型为 4 的 UUI 阅读全文
posted @ 2025-04-12 13:22 kuki' 阅读(257) 评论(0) 推荐(0)
摘要: 条件构造器的方法 eq eq 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的相等条件。 使用范围 QueryWrapper LambdaQueryWrapper UpdateWrapper LambdaUpdateWrapper 方法签名 // 设置指定字段 阅读全文
posted @ 2025-04-12 11:17 kuki' 阅读(300) 评论(0) 推荐(0)
摘要: MyBatis-Plus文档地址 https://baomidou.com/guides/data-interface/#使用步骤 持久层接口 query 提供链式查询操作,可以连续调用方法来构建查询条件。 // 链式查询 普通 QueryChainWrapper<T> query(); // 链式 阅读全文
posted @ 2025-04-12 11:12 kuki' 阅读(94) 评论(0) 推荐(0)
摘要: 在 MyBatis-Plus 中, User user = query().eq("phone", phone).one(); 创建一个查询条件,指定字段 phone 等于变量 phone 的值,然后执行查询,返回符合条件的单个 User 对象。 逐部分解释 query():这是在 IService 阅读全文
posted @ 2025-04-12 11:05 kuki' 阅读(84) 评论(0) 推荐(0)
摘要: 在 Java 中,Boolean 是一个包装类,它可以为 null,而基本类型 boolean 则不能。因此,在进行布尔值判断时,必须首先检查对象是否为 null,以避免在解包时抛出 NullPointerException。 在代码中: if (oneLevelLimit != null && o 阅读全文
posted @ 2025-04-12 00:00 kuki' 阅读(22) 评论(0) 推荐(0)