一种前缀匹配的工具类

Posted bohu83

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一种前缀匹配的工具类相关的知识,希望对你有一定的参考价值。

   背景:

   如果通常前缀匹配会想到数据库或者ES的方式。如果不借助于三方,Java自己有么有类似的组件?

 再看消息的代码,有这样业务场景:对于一个主题subject,想看有哪些group订阅了。而对于消费者来说,订阅的时候就是需要支持前缀匹配的,比如XXX.order.pay,支持订阅XXX.order 就能获取消息。

   看到大佬使用了ConcurrentRadixTree

使用方式:

tree.getValueForExactKey(prefix)
tree.putIfAbsent(prefix, map)

为啥没见过这个呢?而不是以为的字典树。

 

基数树与字典树的区别在于基数树将单词压缩了, 节点变得更少,解决了字典树高度问题。

起到了startwith的作用。类似的,看下这个jar的,ConcurrentReversedRadixTree

起到了endwith的作用。

应用广泛:

除了在消息队列的应用,广泛应用的是路由器做路由,或者linux系统缓存等。

以上是关于一种前缀匹配的工具类的主要内容,如果未能解决你的问题,请参考以下文章

一种前缀匹配的工具类

基数树RadixTree的golang实现

是否有按类前缀的 CSS 选择器?

代理工具--fiddle

20191209-八大排序之基数排序

第25条:总是为第三方类的分类名称加前缀