redis是单线程的(4.0之前),keys查询键类似hbase的全表扫描(也可以理解为select *),大数据量时非常耗时,因此官方给出了scan,使用scan类似数据库分页,可以指定查询多少个元素,官网的说明是scan是一种遍历,只不过可以用count指定每次查询多少个元素

语法:scan cursor match pattern count num

cursor:游标,默认从0开始,每一次执行scan除了返回查询结果还会返回游标的位置,即便某次查询结果为空,并不能代表遍历结束,只有当返回的游标为0时,才能代表遍历结束

match:默认是 * ,匹配指定的元素

count:默认是10,redis的底层实现类似java的hashmap,都是hash表,所以真正存储数据的是数组,count指定的是每次查询数组多少个元素

综上:scan查询count数量的元素返回满足match条件的结果

使用Jedis来操作redis

 @Test
public void test2() {
Jedis jedis = new Jedis("192.168.101.101");
System.out.println(jedis.ping()); // 0 单次返回的结果为0并不代表遍历结束,只有当返回的cursor为0时才代表遍历结束
String cursor = ScanParams.SCAN_POINTER_START; ScanParams params = new ScanParams();
//默认的count数量为10,count并非限定返回结果的数量,
// 而是单次遍历的数组元素数量(redis底层是hash表实现的,所以存放数据的是数组),返回其中匹配的元素
//当元素较多,而count设置的比较小时,此时会进行多次查询
params.count(10);
params.match("u*"); ScanResult<String> scanResult;
boolean flag = true;
while (flag) {
scanResult = jedis.scan(cursor, params);
cursor = scanResult.getCursor();
if (Integer.parseInt(cursor) == 0) {
flag = false;
}
System.out.println(cursor);
scanResult.getResult().forEach(i -> System.out.println(i));
} jedis.close();
}

类似的还有hscan(hash),zscan(zset),sscan(set),不再赘述

什么是二进制安全?比如你用word打开了一张图片,显示的是乱码,如果你修改了这些乱码,再用图片查看器打开图片时你会发现图片打不开了,这个操作就是非二进制安全的

还有一个例子,写入文件时如果写入的编码与文件编码不一致,写入之后会产生大量的无意义的乱码,很容易导致文件无法正常显示,c语言默认将空格作为字符串的结尾,这就导致c保存字符串时会出现内容丢失的问题,redis底层存储字符串的是sds,虽然使用的是char类型的数组,但里面保存的却是字节,此外redis没有对字符串设定任何的过滤及修改,从这点上看redis是二进制安全的,可以存储视频,音频,redis的字符串最大长度是512M,扩容的方式类似java中的hashmap,list等都是预先分配多余的空间,从而减少频繁的内存分配带来的性能开销

redis scan count的含义/二进制安全问题的更多相关文章

  1. Redis Scan迭代器遍历操作原理(一)

    Redis在2.8.0版本新增了众望所归的scan操作,从此再也不用担心敲入了keys*, 然后举起双手看着键盘等待漫长的系统卡死了··· 命令的官方介绍在这里, 中文版由huangz同学细心翻译了, ...

  2. Redis Scan命令

    原地址:https://www.cnblogs.com/tekkaman/p/4887293.html [Redis Scan命令] SCAN cursor [MATCH pattern] [COUN ...

  3. Redis Scan迭代器遍历操作原理(二)

    续上一篇文章 Redis Scan迭代器遍历操作原理(一)–基础 ,这里着重讲一下dictScan函数的原理,其实也就是redis SCAN操作最有价值(也是最难懂的部分). 关于这个算法的源头,来自 ...

  4. redis scan 命令指南

    redis scan 命令指南 1. 模糊查询键值 redis 中模糊查询key有 keys,scan等,一下是一些具体用法. -- 命令用法:keys [pattern] keys name* -- ...

  5. Redis SCAN命令实现有限保证的原理

    SCAN命令可以为用户保证:从完整遍历开始直到完整遍历结束期间,一直存在于数据集内的所有元素都会被完整遍历返回,但是同一个元素可能会被返回多次.如果一个元素是在迭代过程中被添加到数据集的,又或者是在迭 ...

  6. redis scan迭代模糊匹配

    $redis = new Redis(); $redis->connect('localhost', 6379); $iterator = null; while (true) { $keys ...

  7. redis SCAN cursor

    https://redis.io/commands/scan 可以看到: sscan的返回结果,有两部分, 第一部分  是一个数字.其实代表一个游标. 第二部分  是结果. scan是以游标为基础,每 ...

  8. Redis Scan的使用方式以及Spring redis的坑

    SpringRedisTemplate针对这个Scan进行了封装,示例使用(针对最新库spring-data-redis-1.8.1.RELEASE): Set<Object> execu ...

  9. redis scan命令使用

      以前的项目中有用到redis的keys命令来获取某些key,知道看了这篇文章 https://mp.weixin.qq.com/s/SGOyGGfA6GOzxwD5S91hLw.安全起见,这次打算 ...

随机推荐

  1. 程序跳转到itunes商店

    找到应用程序,点击应用程序下面的小三角图标,再选择"复制链接",就可以获取此应用的链接了. 比如: itunes.apple.com/cn/app/bai-du-wen-kuhd/ ...

  2. SQLServer —— 用户权限操作

    说明 以下操作都是基于SQLServer登陆验证方式登陆.而且操作员都是 sa. 一.添加登陆账号 use master go ' 第一个(xu)是登陆名,第二个(123456)是登陆密码. 执行语句 ...

  3. poj 2431 【优先队列】

    poj 2431 Description A group of cows grabbed a truck and ventured on an expedition deep into the jun ...

  4. hdu2577 dp

    也可以字符串搞.dp思路还是很清晰的.dp[][0]表示未锁定,dp[][1]表示锁定键. #include<stdio.h> #include<string.h> #defi ...

  5. 2019-4-7-VisualStudio-解决方案筛选器-slnf-文件

    title author date CreateTime categories VisualStudio 解决方案筛选器 slnf 文件 lindexi 2019-04-07 11:34:59 +08 ...

  6. linux下arm平台Qt编译环境搭建与解析

    一.概述:      我们知道QTcreator.这仅仅是个IDE,他包含了一个编译器--qmake.这两者的关系与codeblocks和g++的关系一样,首先要明确这些.      而我们在linu ...

  7. @codeforces - 1209H@ Moving Walkways

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 机场中常常见到滑行道:假如一个滑行道的运行速度为 s,你的行走速 ...

  8. asp.net抓取网页html源代码失败 只因UserAgent作怪

    asp.net抓取网页html源代码,我想对于任何一个asp.net程序员来说都不再陌生,这是一个非常简单容易就能实现的功能.下面便是一个通用的asp.net获得网页源代码的程序. 首先引用 usin ...

  9. 4 文件操作 支持图片 视频 mp3 文本等

    #文件操作:send_file,支持图片 视频 mp3 文本等@app.route("/img")def img(): return send_file("1.jpg&q ...

  10. uva 11806 Cheerleaders (容斥)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...