一般面试中考察的题目通常是由三类组成的,基础面试题、进阶面试题、开放性面试题,而本文的题目则属于一个开放性的面试题,但对于 Redis 这种以数据为核心的缓存中间件来说,实现在海量数据中查询一个值是否存在还是相对比较容易的。

因为是海量数据,所以我们就无法将每个键值都存起来,然后再从结果中检索数据了,比如数据库中的 select count(1) from tablename where id='XXX',或者是使用 Redis 普通的查询方法 get XXX 等方式,我们只能依靠专门处理此问题的“特殊功能”和相关方法来实现数据的查找。

我们本文的面试题是如何在海量数据中查询一个值是否存在?

典型回答

统计一个值是否在海量数据中可以使用布隆过滤器,布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。也就是说布隆过滤器的优点就是计算和查询速度很快,但是缺点也很明显就是存在一定的误差。

在 Redis 中布隆过滤器的用法如下:

  1. bf.add 添加元素;
  2. bf.exists 判断某个元素是否存在;
  3. bf.madd 添加多个元素;
  4. bf.mexists 判断多个元素是否存在;
  5. bf.reserve 设置布隆过滤器的准确率

使用示例如下:

127.0.0.1:6379> bf.add user xiaoming
(integer) 1
127.0.0.1:6379> bf.add us

如何在海量数据中查询一个值是否存在?相关推荐

  1. access订单明细表怎么做_快速开发平台(进销存教程)--必须在字段采购订单明细表.完成数量中输入一个值...

    时 间:2014-04-05 21:20:52 作 者:摘 要:快速开发平台  主表 子表 Tmp表 正 文: 一.问题描述 学员@防城港-KingめArthur在做采购订单时,出现错误提示'必须在字 ...

  2. mysql中查询一个字段属于哪一个数据库中的哪一个表的方式

    mysql中查询一个字段具体是属于哪一个数据库的那一张表:用这条语句就能查询出来,其中 table_schema 是所在库, table_name 是所在表 --mysql中查询某一个字段名属于哪一个 ...

  3. 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出

    问题: 从键盘中输入一个值,在数组中查找该值的索引并输出 代码: package learnjava;import java.util.Scanner;public class demo13 {pub ...

  4. ThinkPHP中查询一个时间段的数据

    在实际操作的时候,需要从数据库中查询一个时间段的数据并返回使用,我在数据库中设置如下: 其中时间设置是datetime类型,没使用时间戳的显示,而是按照年月日时分秒的格式显示的,然后想从数据库中取出一 ...

  5. 如何在R代码中找到一个值的行号

    如何在R代码中找到一个值的行号? 例如: 在以下一组值中,如何在第4列中找到特定值的行号? 如何使用R代码命令找到列4中的值"1578"的行号. > mydata_2sex ...

  6. php中连接两个值,php - 如何从两个表的连接中选择一个值? - SO中文参考 - www.soinside.com...

    我想在LaravelMySQL中实现一些功能, 但似乎没有找到正确的解决方案. 我可以用子查询来实现我想要的东西, 但是我被告知他们没有联接那么高效. 而且,我将不得不把这个解决方案转换到Eloque ...

  7. 中查询一个文件夹下文件数量_如何在 Bash 中使用循环 | Linux 中国

    使用循环和查找命令批量自动对多个文件进行一系列的操作.-- Seth Kenlon(作者) 人们希望学习批处理命令的一个普遍原因是要得到批处理强大的功能.如果你希望批量的对文件执行一些指令,构造一个可 ...

  8. 如何在Python中针对一个值检查多个变量?

    Given multiple variables and they are assigned some values, we have to test a value with these varia ...

  9. java调用构造函数中某一个值_Java如何在枚举的构造函数中调用另一个枚举值

    Java中的枚举(enum)是一种存储一组常量值的数据类型.您可以使用枚举来存储固定值,例如一周中的天,一年中的月等. 您可以使用关键字 enum定义枚举,后跟枚举的名称为-enum Days { S ...

最新文章

  1. Python中的高阶变量
  2. java io运用_Java IO相关使用
  3. 网友的VOIP总结 1
  4. 对称加密、非对称加密深度解析
  5. 第八章 OGRE中合成器(也就是传说中的image-based rendering)以及如何在OGRE中对着色器的uniform变量传值
  6. 【模拟】牛客网:区间表达
  7. Futter基础第7篇: 实现底部导航
  8. 无法定位软件包dbus-glib-1
  9. NVIDIA H264解码是硬件电路还是CUDA
  10. sqlite数据库保存聊天记录
  11. 微波工程(6)——射频放大器设计
  12. 使用TRADOS翻译软件助力论文写作-基本软件设置、谷歌GOOGLE和百度翻译平台接入
  13. nx.adjacency_matrix(G).todense()计算邻接矩阵与真实结果不一致
  14. Telemetry原理
  15. 文献解读|迁徙蝗虫生理和转录水平的衰老特征
  16. 渔业公司宣传片制作技巧
  17. SAP PCA利润中心会计案例教程案例介绍
  18. JAVA正则表达式,matcher.find()和 matcher.matches()的区别
  19. 初学者学Java常遇到的问题,我都给你回答了!
  20. (时间篇)关于时间的思考

热门文章

  1. python实现表格线性回归_Python实现线性回归
  2. easyui java管理系统_EasyUI 后台管理系统
  3. 『收藏向 期末SSM课设救急』 教你从搭建到测试运行手撸一个SSM项目实战,附带源码,前端页面、解析和一般遇到的问题(排雷)
  4. MZOJ 1345 hero
  5. AI造福设计师:搭配色板这种苦差事交给GAN就好啦(教程)
  6. UVA 12501 Bulky process of bulk reduction ——(线段树成段更新)
  7. ubuntu双系统导致进windows花屏
  8. 软件测试都有哪些证书,软件测试都有哪些证书呀?有用吗?
  9. 插入公式_一个小工具,彻底帮你搞定在Markdown中插入公式的问题
  10. 详解:设计模式之-策略设计模式