黑名单校验器解决方案
「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战」
一、黑名单过滤器业务场景分析
在一些电商系统,如淘宝的评价功能,不是任何人都可以评价,只能是购买了商品的,并且有良好的评价记录的才能评价审核通过,有一种职业就是差评师,差评师就是勒索敲诈商家,这种差评师在淘宝里面就被设置了黑名单,即使购买了商品,也评价不了。
二、黑名单校验器的redis技术方案
黑名单过滤器的应用场景很多,如设备黑名单,ip黑名单,用户黑名单等等
电商系统中,高并发的情况下,通过查询数据库过滤明显不符合要求,通用的做法都是通过Redis的set结构来实现的。
- 步骤1:同步数据,先把数据库的数据同步到redis的set集合中。
- 步骤2:查询过滤,评价的时候验证是否在黑名单,通过redis的sismember命令来实现。
三、SpringBoot+Redis实现黑名单校验器
步骤1:初始化数据到redis缓存中
/**
* 初始化数据到redis缓存中
*/
@PostConstruct
public void init(){
List<Integer> blacklist=this.blacklist();
blacklist.forEach(t->this.redisTemplate.opsForSet().add(Constants.BLACKLIST_KEY,t));
}
/**
* 模拟500个黑名单
*/
public List<Integer> blacklist() {
List<Integer> list=new ArrayList<>();
for (int i = 0; i < 500; i++) {
list.add(i);
}
return list;
}
复制代码
步骤2:编写黑名单校验器接口
/**
*黑名单校验器接口
* true=黑名单
* false=不是黑名单
*/
@GetMapping(value = "/isBlacklist")
public boolean isBlacklist(Integer userId) {
boolean bo=false;
try {
//到set集合中去校验是否黑名单,
bo = this.redisTemplate.opsForSet().isMember(Constants.BLACKLIST_KEY,userId);
log.info("查询结果:{}", bo);
} catch (Exception ex) {
//这里的异常,一般是redis瘫痪 ,或 redis网络timeout
log.error("exception:", ex);
//TODO 走DB查询
}
return bo;
}
复制代码
redis分布式缓存系列
- redis分布式缓存(一)一一 redis安装(linux和docker)
- redis分布式缓存(二)一一 RDB和AOF
- redis分布式缓存(三)一一 SpringBoot集成Mybatis-Plus,Redis和Swagger
- redis分布式缓存(四)一一 SpringCache集成Redis
- redis分布式缓存(五)一一 常用命令(String)
- redis分布式缓存(六)一一 文章的阅读量PV解决方案(String)
- redis分布式缓存(七)一一 分布式全局id解决方案(String)
- redis分布式缓存(八)一一 高并发原子性操作( Redis+Lua)
- redis分布式缓存(九)一一 黑客防刷攻击解决方案(String)
- redis分布式缓存(十)一一 常用命令(Hash)
- redis分布式缓存(十一)一一 储存java bean对象业务剖析(Hash)
- redis分布式缓存(十二)一一 短链接解决方案(Hash)
- redis分布式缓存(十三)一一 京东购物车解决方案
- redis分布式缓存(十四)一一 分布式session不一致性解决方案
- redis分布式缓存(十五)一一 高可用的用户注册解决方案
- redis分布式缓存(十六)一一 用户发微博解决方案
- redis分布式缓存(十七)一一 常用命令(Set)
- 文章持续更新中...