Redis 模糊查询 Scan扫描介绍及使用

我们在实际开发中,会遇到在redis中模糊查询匹配的键值需求。主要有两种方式,第一:KEYS pattern 第二:SCAN
但是第一种方式的时间复杂度为O(N),其中N为数据库中密钥的数目。简单介绍下他的用法

一.KEYS pattern

Keys * // 遍历当前数据库中所有的key
Keys *xx // 匹配以xx结尾的key
Keys *xx* // 匹配字段中含有xx的字段
Keys xx* // 匹配以xx开头的key

官方对该命令的说明:将KEYS视为命令,仅应在生产环境中格外小心使用。在大型数据库上执行时,可能会破坏性能。此命令用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用KEYS

二.SCAN的介绍及使用

Scan的时间复杂度为O(1),使用该命令完全不用考虑数据量的大小以及查询效率。

1.Scan及相关命令

SCAN:迭代当前选择的Redis数据库中的密钥集
SSCAN:迭代Sets类型的元素。
HSCAN:迭代Hash类型的字段及其关联的值
ZSCAN:迭代排序集类型及其相关分数的元素
上面的四条命令,可以说是能查询redis数据库中所有类型结构数据。
SCAN,SSCAN,HSCAN和ZSCAN的工作方式都非常相似
下面以JAVA语言为基础,主要介绍SCAN的使用

2.SCAN的使用

1.导入pom依赖

<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
</dependency>

2.语法介绍
SCAN是基于游标的迭代器。这意味着在每次调用该命令时,服务器都会返回一个更新的游标,用户需要将该游标用作下一个调用中的游标参数。游标设置为0时,迭代将开始,服务器返回的游标为0时,迭代将终止

SCAN cursor [MATCH pattern] [COUNT count] 

cursor:初始设为0
MATCH :<返回和给定模式相匹配的元素>
COUNT:每次查询数量
SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一个参数总是一个数据库键
实例:

scan 0 match phone* count 20 //每次查询20个数据库中key字段中以phone开头的 
sscan myset 0 match color* count 30 //每次查询30个myset(set)中key字段中以color开头的

3.代码实例

public static void main(String[] args) {
	// 初始化Jedisl连接实例
	JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(8);
    JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port,timeout,password,database);
    Jedis jedis = jedisPool.getResource();
    // 查询条件
    ScanParams scanParams = new ScanParams();
	scanParams.count(100);
	scanParams.match("huawei*");
	// 这一步很精髓 构造一个“”的游标
	String cursor = "";
	while(!cursor.equals("0")){
		ScanResult<String> scan = jedis.scan(cursor,scanParams);
		// 如果需要使用 sscan zscan hscan 
		// jedis.sscan(key,cursor,scanParams);
		cursor = scan.getStringCursor();
		List<String> result = scan.getResult();
		// 下面是你自己代码逻辑
	} 

	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值