阅读 205

redis分布式缓存(十八)一一 黑名单校验器解决方案

一、黑名单过滤器业务场景分析

在一些电商系统,如淘宝的评价功能,不是任何人都可以评价,只能是购买了商品的,并且有良好的评价记录的才能评价审核通过,有一种职业就是差评师,差评师就是勒索敲诈商家,这种差评师在淘宝里面就被设置了黑名单,即使购买了商品,也评价不了。

二、黑名单校验器的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; }


作者:小伙子vae
链接:https://juejin.cn/post/7031469771749228581


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐