游标迭代器(过滤器)——Scan
一个问题引发的「血案」
曾经发生过这样一件事,我们的 Redis 服务器存储了海量的数据,其中登录用户信息是以 user_token_id 的形式存储的。运营人员想要当前所有的用户登录信息,然后悲剧就发生了:因为我们的工程师使用了 keys user_token_*
来查询对应的用户,结果导致 Redis 假死不可用,以至于影响到线上的其他业务接连发生问题,然后就收到了一堆的系统预警短信。并且这个假死的时间是和存储的数据成正比的,数据量越大假死的时间就越长,导致的故障时间也越长。
那如何避免这个问题呢?
问题的解决方案
在 Redis 2.8 之前,我们只能使用 keys 命令来查询我们想要的数据,但这个命令存在两个缺点:
- 此命令没有分页功能,我们只能一次性查询出所有符合条件的 key 值,如果查询结果非常巨大,那么得到的输出信息也会非常多;
- keys 命令是遍历查询,因此它的查询时间复杂度是 o(n),所以数据量越大查询时间就越长。
然而,比较幸运的是在 Redis 2.8 时推出了 Scan,解决了我们这些问题,下面来看 Scan 的具体使用。
Scan 命令使用
我们先来模拟海量数据,使用 Pipeline 添加 10w 条数据,Java 代码实现如下:
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import utils.JedisUtils;public class ScanExample {public static void main(String[] args)
游标迭代器(过滤器)——Scan相关推荐
- redis之十五(游标迭代器(过滤器)——Scan)
一个问题引发的「血案」 曾经发生过这样一件事,我们的 Redis 服务器存储了海量的数据,其中登录用户信息是以 user_token_id 的形式存储的.运营人员想要当前所有的用户登录信息,然后悲剧就 ...
- Redis都不懂?就别去面试了!聊聊我的Redis新专栏「视频版」
前不久,有一个读者在后台留言,说他面试 Java 开发工程师岗位时,居然大部分的面试问题都是关于 Redis ,他都差点都忘记了自己应聘的是 Java 工程师了.而然这种现象在现在的后端面试中很常见, ...
- 你技术很强但薪资不涨?这门技术远比你想的更重要!
前不久,有一个读者在后台留言,说他面试 Java 开发工程师岗位时,居然大部分的面试问题都是关于 Redis 的,他都差点都忘记了自己应聘的是 Java 工程师了.而然这种现象在现在的后端面试中很常见 ...
- 千万不要好奇 Redis 的宝藏功能
Redis 从 2009 年发展到现在,已经被国内外几乎全部公司所使用,国内的 BATJ.新浪微博.360.小米:国外的微软.Twitter.Stack Overflow.Github.暴雪等公司都在 ...
- hbase建表,删表,修改,查询(get,scan,布隆过滤器)
建表 直接建表: create '表名','列族名' 如果之后想加入新的列族: alter '表名','列族名' 补充: alter '表名',{NAME='列族名',属性1=>属性值 1,属性 ...
- java redis keys_jedis keys和scan操作
KEYS pattern 查找所有符合给定模式 pattern 的 key . KEYS * 匹配数据库中所有 key . KEYS h?llo 匹配 hello , hallo 和 hxllo 等. ...
- 迭代器模式源码解析(jdk+mybatis)
自己实现的数据结构,迭代器在源码中的一些应用,java.util.Iterator接口,/*** An iterator over a collection. {@code Iterator} tak ...
- Hbaseshell scan多种过滤操作
查询数据 get 'bjcjtest1_hdrive_2000',"\x00\x80\x03\x8D\x96\xA9\xDCO\xB6"scan 'tts_201905',{STA ...
- 采坑记录-Redis使用scan代替keys
[提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! spark代码案例地址: https://github.com/Mydreaman ...
最新文章
- R语言dplyr包将dataframe中的NA值替换(replace)为0实战:所有NA值替换(replace)为0、具体列的NA值替换(replace)为0、若干列的NA值替换(replace)为0
- 人工智能基础-机器学习任务之常规解决的六大问题
- Oracle存储过程中异常Exception的捕捉和处理
- OSChina 周六乱弹 —— 这辈子最丢脸的事
- yum安装与源码编译安装实际使用区别
- queryList爬虫获取内容的几种方法总结 queryList给抓取的内容增加html追加元素html 代码实例...
- gitlab备份及恢复
- 加密安装Kli Linux
- Chrome插件(扩展)
- 菜刀php教程,Weevely(php菜刀)工具使用详解
- mysql中的存储机制_Mysql的存储引擎
- 2012中国移动社交游戏市场盈利模式探讨
- 中国雅虎殒身记:当初说好的独立上市呢?
- 回归分析-线性回归-检验-模型
- JAVA实现Excel照相机功能_用Excel照相机功能在Excel中显示和调用图片的方法
- BZOJ_P3110 [ZJOI2013]K大数查询(线段树+整体二分)
- ubuntu 下安装java_Ubuntu下安装java
- Java项目:SSM实现的一个在线文具学习用品购买商城网站
- 镭速传输安全设计第三篇:传输安全设计
- 如何成为用户真正需要的短信验证平台
热门文章
- 修改tomcat服务器图标,修改tomcat小猫图标,设置项目的favicon图标
- Linux创始人数据结构,Linux 通用数据结构说明
- Angular之ngx-permissions的角色管理
- 计算机技术与软件专业技术资格(水平)考试 全国各省市成绩查询
- linux I/O 栈 预习(上)
- cf375D. Tree and Queries(莫队)
- destoon b2b 360网站智能摘要标签配置
- [转载]使用awk进行数字计算,保留指定位小数
- Linux 服务器中文乱码编码解决
- perl anyevent socket监控web日志server