摘要: 什么是缓存穿透? 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在, 这样缓存永远不会生效,这些请求都会打到数据库。 解决方案 缓存空字符串(即一个默认值) 优点:实现简单,维护方便 缺点:额外的内存消耗,可能造成短期的不一致 布隆过滤 优点:内存占用较少,没有多余key 缺点:实现复杂,存在 阅读全文
posted @ 2025-04-08 23:55 kuki' 阅读(42) 评论(0) 推荐(0)
摘要: 文档链接:https://plus.hutool.cn/apidocs/cn/hutool/core/text/CharSequenceUtil.html#isNotBlank-java.lang.CharSequence- CharSequenceUtil public static boolea 阅读全文
posted @ 2025-04-08 23:41 kuki' 阅读(21) 评论(0) 推荐(0)
摘要: 采用缓存主动更新来解决数据一致性问题,同时也选择使用双写方案的删除缓存模式(增加TTL超时剔除兜底),同时将缓存和数据库的操作放到同一个事务来保障操作的原子性。 需求 根据id查询店铺时,如果缓存未命中,则查询数据库,将数据库结果写入缓存,并设置超时时间。 根据id修改店铺时,先修改数据库,再删除缓 阅读全文
posted @ 2025-04-08 21:15 kuki' 阅读(91) 评论(0) 推荐(0)
摘要: 加缓存的问题 缓存的使用降低了后端负载,提高了读写的效率,降低了响应的时间。 但缓存带来问题,比如:数据一致性问题 数据一致性的产生原因 缓存和数据库中的数据不同步 所以需要缓存更新策略。 缓存更新策略 主动更新(手动)。手动编码实现缓存更新,在修改数据库的同时更新缓存 双写方案(Cache Asi 阅读全文
posted @ 2025-04-08 20:44 kuki' 阅读(109) 评论(0) 推荐(0)
摘要: 代码讲解 stringRedisTemplate.opsForList().leftPushAll(CACHE_SHOP_TYPE_KEY, shopTypes); 这行代码的作用是将shopTypes列表中的所有元素批量从左侧推入(即插入)到Redis中键名为CACHE_SHOP_TYPE_KEY 阅读全文
posted @ 2025-04-08 17:57 kuki' 阅读(98) 评论(0) 推荐(0)
摘要: Service Interface https://baomidou.com/guides/data-interface/#service-interface IService 是 MyBatis-Plus 提供的一个通用 Service 层接口,它封装了常见的 CRUD 操作,包括插入、删除、查询 阅读全文
posted @ 2025-04-08 17:49 kuki' 阅读(100) 评论(0) 推荐(0)
摘要: 在Spring框架中,StringRedisTemplate是一个专门用于操作Redis字符串数据的模板类。它提供了多种方法来处理Redis中的数据结构,包括列表(List)、集合(Set)、哈希(Hash)等。使用了opsForList().range方法来获取Redis列表中的元素。 List< 阅读全文
posted @ 2025-04-08 17:22 kuki' 阅读(101) 评论(0) 推荐(0)
摘要: 缓存问题与解决策略 缓存雪崩(Cache Avalanche): 缓存雪崩是指在同一时间大量缓存数据过期,导致大量请求直接访问数据库,可能导致数据库宕机。 解决方案: 设置不同的过期时间: 为缓存数据设置不同的过期时间,避免大量数据同时过期。​ 加锁或队列: 使用锁或队列控制缓存重建的进程,防止大量 阅读全文
posted @ 2025-04-08 14:34 kuki' 阅读(30) 评论(0) 推荐(0)
摘要: 由于 UserHolder 的方法是静态的,您可以在任何地方直接通过类名调用这些方法,而无需创建 UserHolder 的实例。这种设计模式使得在整个应用程序中都可以方便地访问和管理用户信息。 UserHolder 是否是全局变量 UserHolder 本身是一个类,其中的静态变量(如上述示例中的 阅读全文
posted @ 2025-04-08 00:09 kuki' 阅读(36) 评论(0) 推荐(0)