一、缓存 1.1 缓存穿透 1.1.1 定义 缓存穿透是指用户查询不存在的数据,mysql中查不到数据无法写入redis,导致每次查询都会落在mysql上 1.1.2 解决方案 1.1.2.1 缓存空数据 缓存空数据,数据库查询结果为空,任然把这个空结果缓存至redis {key:'查询条件',value:null} 优点:简单 缺点:消耗内存,redis和数据库可能出现数据不一致(第一次查询数据库中没有数据,在redis缓存了一个null值,然后新增了数据到数据库,此时数据库和redis中数据就不一致了,需要手动更新数据库数据到redis,增加了数据维护的复杂性) 1.1.2.2 布隆过滤器 参考布隆过滤器 - 问尤龙の时光 (wenyoulong.com) 1.1.3 代码示例 有如下接口方法,根据用户ID查询用户信息,用户id随便编一个都行 /** * 根据ID获取的用户,用于测试缓存穿透 * @param userId 用户IO * @return 用户信息 */ @GetMapping("/getById/{userId}") public String getById(@..... redis常见问题 待分类
一、定义 布隆过滤器(Bloom Filter)是一种概率型数据结构,用于判断一个元素是否在一个集合中。它由 Burton Howard Bloom 在 1970 年提出。布隆过滤器的特点是空间效率高和查询速度快,但是有一定的误判率,并且一旦添加元素后无法删除。 二、布隆过滤器的工作原理 2.1 初始化 创建一个位数组(bit array),长度为 m,所有位都初始化为 0 2.2 插入元素 对于每一个要加入集合的元素,使用 k 个不同的哈希函数对该元素进行哈希,得到 k 个不同的索引位置。将这些位置上的位设置为 1 2.3 查询元素 当查询一个元素是否存在于集合中时,同样用上述 k 个哈希函数对元素进行哈希,检查所得的 k 个位置上的值是否全都是 1。如果全是 1,则认为该元素可能存在于集合中;如果有一个位置是 0,则可以确定该元素不存在于集合中 三、特点 优点 : 空间效率高:相比于其它数据结构如哈希表或二叉树,布隆过滤器占用的空间更小。 查询速度快:由于只需要计算几个哈希函数,所以查询速度非常快。 可以节省大量的存储资源,尤其是在处理大数据量的情况下。 缺点 : 存在误报(F...... 布隆过滤器 redis