Redis:生产环境中如何对key作模糊查询?

       一般在测试环境中,可以使用keys命令,模糊查询到需要的key,但这个操作只适合在测试环境中使用,不适合在生产环境中使用,原因是redis是单线程运行的,当redis中的数据量很大时,由于此操作会遍历所有数据,并将结果一次性全部返回,执行时间会比较长,从而导致后续操作等待,直接影响系统的正常运行。解决的办法是使用scan命令:

scan cursor [MATCH pattern] [COUNT count]

  • cursor:表示游标,从“0”开始,此命令执行完后会返回一个新的cursor值。如果cursor!="0",则表示还有key未返回,需要再调用scan,并使用此新的cursor值,来获取下一批key;如果cursor=="0",则表示遍历结束。
  • pattern:表示模糊匹配的样式
  • count:表示一批最多返回多少条记录,默认为10

下面给出java代码的例子:

import java.util.List;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;

public class RedisTester {

	public static Jedis getRedis() {
		Jedis jedis = new Jedis("127.0.0.1", 6379);
		System.out.println("connect successfully");

		jedis.auth("XXXXXXXXXX");

		return jedis;
	}

	public static void main(String[] args) {
		Jedis jedis = getRedis();
		String cursor = "0";

		do {
			ScanParams scanParams = new ScanParams();
			scanParams.match("activity560.user*");
			scanParams.count(10);

			ScanResult<String> sr = jedis.scan(cursor, scanParams);
			List<String> resultList = sr.getResult();

			for (String result : resultList) {
				System.out.println("key: " + result);
			}

			cursor = sr.getStringCursor();
			System.out.println("cursor: " + cursor);
		} while (!cursor.equals("0"));
	}

}

 

参考文档

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
Redis 命令参考 » Key(键) » SCAN
如何批量删除Redis的key

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值