来自redis的python最相似的前缀

Posted

技术标签:

【中文标题】来自redis的python最相似的前缀【英文标题】:python most similar prefix from redis 【发布时间】:2022-01-21 21:10:41 【问题描述】:

我的redis中有所有国家的电话前缀列表,当客户拨打一个号码时,我需要在我的redis中找到该号码最相似的确切前缀。

redis example keys: 
auth:prefix:49
auth:prefix:49115
auth:prefix:49116
auth:prefix:4915
auth:prefix:491511
auth:prefix:491512
auth:prefix:491514
auth:prefix:491515
auth:prefix:491516

示例号码匹配:

4911234XXXXXXXX -> auth:prefix:49
491514XXXXXXXXX -> auth:prefix:491514
491513XXXXXXXXX -> auth:prefix:4915
491515XXXXXXXXX -> auth:prefix:491515

我尝试从右侧一个一个地删除数字,并检查每一步,它有效但它根本没有效率。谁能提出更有效的方法?

【问题讨论】:

【参考方案1】:

您可以使用MGET 在一次调用 Redis 中获取您输入的所有可能前缀。具有非 nil 值的最长键是您最相似的前缀:

假设你的输入是49151498,所有可能的前缀是:4, 49, 491, 4915, 49151, 491514, 4915149, 49151498

127.0.0.1:6379[1]> mget 4 49 491 4915 49151 491514 4915149 49151498
1) (nil)
2) "0"
3) (nil)
4) "0"
5) (nil)
6) "0"
7) (nil)
8) (nil)

非零值的最长键是第6个前缀:491514

使用此解决方案,您只需调用 Redis 一次,并在客户端进行一些检查。它应该比原来的解决方案快得多,即多次调用 Redis。

【讨论】:

这种方法对我有用,谢谢

以上是关于来自redis的python最相似的前缀的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题 -- 20200607 前缀和篇

redis 删除指定前缀的key

Redis实战

从一组(相似的)字符串中确定前缀

redis jedis lpush为啥加前缀

基于商品属性的相似商品推荐算法——批量处理商品属性,得到属性前缀及完整属性字符串