java敏感词校验

最近有一个需求就是需要给一串文字做敏感词校验

需求

  1. 根据上传的一串字符里通过校验可以返回里面的敏感词
  2. 不同的用户有一个敏感词库
  3. 用户可以随时修改需要校验的敏感词库(不会经常修改)

解决方案

  1. 存储敏感词库 由于我们用的数据库是MYSQL 我们就将这个敏感词存在数据库,那就是怎么存text一下全部存储还是每个敏感词都分开,最后根据娇艳的规则方式将其存储为一个或一段敏感词存储在一行。
  2. 怎么去校验?
  • 由于之前也没有接触过,最笨的办法也就是通过For循环equals对比,这样肯定不行,面向搜索编程,chrome搞起来:

https://juejin.im/post/5b6ef984e51d45667f3878ef
http://cmsblogs.com/?p=1031
https://blog.csdn.net/chenssy/article/details/26961957
看了各个大神的后 我知道了这个DFA算法它能快速的去 check字段
具体的内容可以大神博客看里面有Util Demo
3. 怎么去区分用户且根据用户的group 去check呢?

  • 不能有性能问题 那就用 Redis吧放在Redis里面读取快
  • 根据用户的group设为KEY 以Redis的key set 的方式存储
  1. 还有一个问题就是用户更新词库的时候怎么去同步呢?
    • 毫无疑问就是在更新的同时去更新Redis 但是这样会不会有问题呢?就是在更新的时候用户同时也发生了check呢? 于是就采用不去更新直接将这个key删除,然后当去redis 查的时候没有这个用户的话去数据库里面查,拿到数据后 再同时更新redis。 但是这个又有一个问题那就是缓存穿透(虽然我的系统中用户的并发量还达不到这个标准)解决办法: 1.使用互斥锁(mutex key)
      业界比较常用的做法,是使用mutex。简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法
      设计完后回顾一下大概是没什么问题啊!!!
      那就OK了 最近在练习画图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygfYVE13-1582987657847)(19F61C11D3FA4F71A417142B62E67A31)]

大佬们!绝得还有什么问题!望给小弟指点一下!!!

原创文章 92 获赞 11 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40413961/article/details/104584207
今日推荐