做商城网站哪里好,图片设计制作软件,北京快三走势图今天,可以让外国人做问卷调查的网站布隆过滤器#xff08;Bloom Filter#xff09;是一种数据结构#xff0c;用于快速判断一个元素是否可能存在于一个集合中。它通过使用多个哈希函数和一个位数组来表示一个集合#xff0c;当一个元素被加入到集合时#xff0c;通过哈希函数计算出多个哈希值#xff0c;并…布隆过滤器Bloom Filter是一种数据结构用于快速判断一个元素是否可能存在于一个集合中。它通过使用多个哈希函数和一个位数组来表示一个集合当一个元素被加入到集合时通过哈希函数计算出多个哈希值并将对应的位数组位置置为1。当需要检查一个元素是否存在于集合时同样通过哈希函数计算出多个哈希值如果所有对应的位数组位置都为1则认为元素可能存在于集合中如果有任何一个位置为0则可以确定元素肯定不存在于集合中。
1. 定义布隆过滤器
布隆过滤器具有高效的插入和查询性能且占用内存较小但是存在一定的误判率即可能会将不存在于集合中的元素误判为存在于集合中。
所以我们需要配置布隆过滤器的存储元素数量和误判率 2.构造器注入布隆过滤器
在业务层里面注入布隆过滤器对象 3.判断用户名是否存在
当我们注册用户名时可能之前被别人注册过了这时我们需要先判断一下在布隆过滤器中是否已存在相同的用户名
调用布隆过滤器中的 contains() 方法判断 4.注册用户
在业务层中定义一个注册方法把前端请求的注册请求体传进去
第一步就是获取到请求体中的 username 字段然后调用判断用户名是否存在的方法如果存在就抛出异常 第二步如果用户名不存在也就是之前没有被注册过那用户就可以继续注册了
然后就可以把请求体插入到数据库中 如果数据库中插入失败就抛出异常
如果插入成功就需要把注册的用户名给添加到布隆过滤器中这样我们之后再判断数据库中是否存在已注册的用户名时就不用访问数据库了而是先在布隆过滤器中查找这样减轻了对数据库的压力
5.分布式锁
如果用户名没注册那么在布隆过滤器中就不存在该用户名也就意味着可以触发注册流程插入数据库。但是如果产生恶意请求在短时间内海量用户请求注册同一个用户名这些请求都会落到数据库造成数据库访问压力。这里通过分布式锁锁定用户名进行串行执行防止恶意请求利用未注册用户名将请求打到数据库。
5.1注入redissonClient
RedissonClient是一个Java的Redis客户端它提供了许多方便的功能和工具来与Redis数据库进行交互。通过RedissonClient开发人员可以方便地操作Redis数据库进行数据的存储、查询、更新和删除等操作。RedissonClient支持多种数据结构和功能如分布式锁、分布式集合、分布式队列等 5.2获取锁
定义一个常量名作为锁名 然后将常量名和注册的用户名绑定从而获取到分布式锁 所以当海量用户注册同一个用户名时只有一个用户可以获取到分布式锁则把该用户注册的信息插入到数据库中插入成功后再把用户名添加到布隆过滤器里面。而其他没有获取到锁的用户则抛出异常