redis模糊查询key的效率问题

AlgoGalacticStrider
• 阅读 6031

优先使用scan, 代替keys,scan每次遍历设置的值,对效率有较大的影响
项目中亲测: 当开发环境缓存有10几条的时候,设置每次查询的条数为10,耗时2000毫秒左右
设置每次查询的条数为100时,效率提升十倍

Jedis jedis=RedisUtils.getConn();

ScanParams scanParams = new ScanParams();

scanParams.match(“key*”);
**// 这里设置的key对效率影响较大
**scanParams.count(100);
Long startTime = System.currentTimeMillis();
List<String> retList = new ArrayList<String>();
final String scanRet = "0";
do {
ScanResult<String> ret = jedis.scan(scanRet, scanParams);
scanRet = ret.getStringCursor();// 返回用于下次遍历的游标,非零则还有数据没遍历
retList.addAll(ret.getResult());// 返回结果
} while (!scanRet.equals("0"));
System.out.println("retList size:"+retList.size());
Long endTime = System.currentTimeMillis();
System.out.println("using time is:" + (endTime - startTime)+"ms");

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
SQL中哪些情况会引起全表扫描
1、模糊查询效率很低:原因:like本身效率就比较低,应该尽量避免查询条件使用like;对于like’%…%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然会效率很低;另外由于匹配算法的关系,模糊查询的字段长度越大,查询的效率就越低。解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至
Wesley13 Wesley13
3年前
MySQL使用on duplicate key update时导致主键不连续自增
使用onduplicatekeyupdate语法有时是很方便,但是会有一个影响:默认情况下,每次更新都会更新该表的自增主键ID,如果更新频率很快,会导致主键ID自增的很快,过段时间就超过数字类型的的范围了解决这个问题,有两种方式:(实际我目前使用的方式是把自增主键ID设置为bigint,也有一部分操作先查询再选择插入OR更新)方法一:拆分成两个
Wesley13 Wesley13
3年前
Oracle查询前几条数据的方法
在Oracle中实现selecttopN:由于Oracle不支持selecttop语句,所以在Oracle中经常是用orderby跟rownum的组合来实现selecttopn的查询。简单地说,实现方法如下所示:select列名1...列名nfrom(select列名1...列名n   f
Wesley13 Wesley13
3年前
Mysql 游标(cursor)
简介    游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。  游标充当指针的作用。  尽管游标能遍历结果中的所有行,但他一次只指向一行。  游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。语法  _DECLAR
Stella981 Stella981
3年前
Postman
一,自动化传参在实现接口自动测试的时候,会经常遇到接口参数依赖的问题,例如调取登录接口的时候,需要先获取登录的key值,而每次请求返回的key值又是不一样的,那么这种情况下,要实现接口的自动化,就要用到postman中设置环境变量这个功能了;在postman中,可以利用tests将接口返回的response设置为环境变量,供后续接口使用(类似参数化的
Stella981 Stella981
3年前
Redis数据库常用操作
keys\  查询全部keysabc\  模糊查询flushdb  删除当前数据库中的全部数据flushall  删除全部数据库中的数据setKEYVALUE  设置数据getKey  获取数据setuser{name:smith,age:10}  设置json结构setnxKEYVALUE  设置不重复s
Stella981 Stella981
3年前
Elasticsearch如何做到亿级数据查询毫秒级返回的
问题:ES在数据量很大的情况下(数十亿级别)如何提高查询效率?这个问题说白了,就是看你有没有实际用过ES,因为啥?其实ES性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下5~10s,坑爹了。第一次搜索的时候,是5~10s,后面反而就快了,可能就几百毫秒。你就很懵,每个用
Wesley13 Wesley13
3年前
ThinkPHP 根据关联数据查询 hasWhere 的使用实例
很多时候,模型关联后需要根据关联的模型做查询。场景:广告表(ad),广告类型表(ad\_type),现在需要筛选出广告类型表中id字段为1且广告表中status为1的列表先看关联的设置部分 publicfunctionadType(){return$thisbelongsTo('A
Wesley13 Wesley13
3年前
unity动态加载资源并缓存到本地
        有人说使用unity的WWW类的LoadFromCacheOrDownload方法就可以实现缓存加载的方式,但是我自己使用的时候发现在unity编辑器环境下是可以的,但是到Android和iOS平台下就会有问题,会导致每次进入资源都是从网络上下载,严重影响效率,所以有了这篇文章        首先说一下整体的设计思路,项目中有很多资源,
Stella981 Stella981
3年前
Elasticsearch分页解决方案
一、命令的方式做分页1、常见的分页方式:fromsizeelasticsearch默认采用的分页方式是fromsize的形式,但是在深度分页的情况下,这种使用方式的效率是非常低的,比如from5000,size10,es需要在各个分片上匹配排序并得到5000\10条有效数据,然后在结果集中取最后10条数据返回。除了会遇到效率上的问题
Easter79 Easter79
3年前
TiDB 源码阅读系列文章(十三)索引范围计算简介
简述在数据库中处理查询请求时,如果可以尽早的将无关数据过滤掉,那么后续的算子就可以少做无用功,提升整个SQL的执行效率。过滤数据最常用的手段是使用索引,TiDB的优化器也会尽量采用索引过滤的方式处理请求,利用索引有序的特点来提升查询效率。比如当查询条件为 a1 时,如果a这一列上有索引,我们就可以利用索引很快的把满足 a