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

7、如何管理昵称重复?

1.并发量小的情况下,可以针对昵称列加数据库字段唯一键

2、并发量大的情况下,使用布隆过滤器。

        - 布隆过滤器(Bloom Filter)是一种高效的概率型数据结构,主要用于判断元素是否属于集合,具有空间效率高,查询速度快的特点,但存在误判率且不支持删除操作。

‌①. 核心原理‌

  • ‌数据结构‌:由位数组(二进制向量)和多个哈希函数组成,初始所有位为0‌12。

  • ‌插入过程‌:元素通过多个哈希函数映射到位数组的多个位置,并将对应位设为1‌34。

  • ‌查询过程‌:若所有哈希对应位均为1,则元素可能存在于集合中;若任一为0,则元素一定不存在‌14。

  • ‌误判原因‌:不同元素的哈希值可能碰撞,导致误判(假阳性),但不会漏判(假阴性)‌25。

‌②. 典型应用场景‌

  • ‌缓存穿透防护‌:在Redis缓存前过滤无效请求,避免数据库压力‌34。

  • ‌网络爬虫去重‌:标记已访问的URL,避免重复抓取‌45。

  • ‌垃圾邮件过滤‌:快速识别黑名单中的邮件地址‌26。

  • ‌分布式系统‌:如海量数据去重、区块链交易验证等‌5。

③. 使用示例

        


import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
import java.nio.charset.StandardCharsets;public class BloomFilterExample {public static void main(String[] args) {// 初始化布隆过滤器,预计存储10万姓名,误判率0.0001BloomFilter<String> bloom = BloomFilter.create(Funnels.stringFunnel(StandardCharsets.UTF_8),100000,0.0001);// 模拟从数据库读取姓名并存入布隆过滤器String[] names = {"张三", "李四", "王五", "赵六", "陈七"};for (String name : names) {bloom.put(name);}// 查询示例String queryName = "张三";if (bloom.mightContain(queryName)) {System.out.println(queryName + " 可能在数据库中");} else {System.out.println(queryName + " 一定不在数据库中");}queryName = "未知名字";if (bloom.mightContain(queryName)) {System.out.println(queryName + " 可能在数据库中");} else {System.out.println(queryName + " 一定不在数据库中");}}
}

1、缓存穿透:查询缓存和数据库都不存在的数据,缓存没有,数据库也没有

2、缓存击穿:缓存中数据的key过期了,这时候所有请求都到数据库查询,瞬时大量请求击穿数据库

3、缓存雪崩:缓存雪崩通常是发生在大量key同一时间失效,大量请求直接打在DB上,影响整个系统。而缓存击穿是针对某一具体的缓存key失效而言,影响相对局部。

http://www.dtcms.com/a/305045.html

相关文章:

  • claudia for claude code
  • ITIL 4 高速IT:解耦架构——构建快速迭代的技术基座
  • 电商修图,尺寸修改适配各大电商平台
  • Elasticsearch 从入门到精通:术语、索引、分片、读写流程与面试高频题一文搞懂
  • 青少年软件编程图形化Scratch等级考试试卷(四级)2025年6月
  • SZU大学物理实验报告|电位差计
  • 赋能低空未来|迪捷软件亮相2025国际低空经济博览会
  • 【tips】小程序css ➕号样式
  • Three.js 性能优化全面指南:从几何体合并到懒加载资源
  • OpenLayers 综合案例-台风风场模拟
  • MIAOYUN参编信通院《大模型API服务性能测试标准》
  • 营销活动效果分析与策略优化
  • 【JVM】常见的 Java 垃圾回收算法以及常见的垃圾回收器介绍及选型
  • ARM7微处理器的核心优势
  • Docker入门基础使用
  • 【vue(2)插槽】
  • ZKmall开源商城中台架构实践:API 网关与服务治理如何撑起电商技术骨架
  • vue3实战九、vue3+vue-cropper实现头像修改
  • 【Linux】批量处理多个用户的 sudo 权限问题
  • 【STM32开发】-基础开发笔记(STM32F103,HAL库开发)
  • 【ComfyUI学习笔记04】案例学习:局部重绘 - 上
  • 墨者:XPath注入漏洞实战
  • 第二十五节 MATLAB矩阵的加法和减法、除法(左,右)矩阵
  • Arduino声控RGB矩阵音乐节奏灯DIY全攻略
  • 解密数据结构之二叉树
  • Android11平台下rk3568的ATGM332D定位模块适配
  • 全志T507平台GPIO 控制(二)
  • OpenCV图像算数运算可莉版
  • bash命令创建新conda环境
  • Kubernetes自动扩容方案