0
点赞
收藏
分享

微信扫一扫

Redis遍历、模糊匹配key的两个命令keys、scan(python使用Redis)

倪雅各 2022-02-16 阅读 90

Redis遍历、模糊匹配key的两个命令keys、scan(python使用Redis)

(1)全量遍历–keys命令

获取Redis中的所有键:

import redis  
  
pool=redis.ConnectionPool(host='10.3.1.151',port=6379,password='mca321',db=2)  
r = redis.tRedis(connection_pool=pool)  

# 获得改=该数据库下所有键
keys = r.keys()  
# 得到键的数据结构类型---以列表形式得到所有键
print(type(keys))  
print(keys)

keys支持模式匹配:

# keys支持模式匹配
keys = redis_connection.keys("AWS_Landsat_010*") #得到以AWS_Landsat_010为前缀的所有key键
print(keys)

pattern通配符的详细说明:

- * 代表匹配任意字符
- ? 代表匹配一个字符
- [] 代表匹配部分字符,例如[1,3]代表匹配1和3,而[1-10]代表匹配1到10的任意数字。
- x 转移字符,例如要匹配星号,问号需要转义的字符

2)渐进式遍历–scan命令

如果需要查找然后删除key的需求,那么在生产环境我们应该使用scan命令,代替keys命令.

scan命令的优点:同样是O(N)复杂度的scan命令,支持通配查找,scan命令或者其他的scan如SSCAN ,HSCAN,ZSCAN命令,可以不用阻塞主线程,并支持游标按批次迭代返回数据,所以是比较理想的选择。

keys相比scan命令优点是,keys是一次返回,而scan是需要迭代多次返回

scan命令的缺点:返回的数据有可能重复,需要我们在业务层按需要去重,scan命令的游标从0开始,也从0结束,每次返回的数据,都会返回下一次游标应该传的值,我们根据这个值,再去进行下一次的访问,如果返回的数据为空,并不代表没有数据了,只有游标返回的值是0的情况下代表结束。

查找所有键key:

keys3=redis_connection.scan_iter()
print(type(keys3))# 返回的是一个迭代器
for key in keys3:
    print(key)
    
keys3=redis_connection.scan()
print(type(keys3))# 返回的是一个元组tuple

查找模式匹配的键key:

keys2=redis_connection.scan_iter("AWS_Landsat*")
print(type(keys2))# 返回的是一个迭代器
for key in keys2:
    print(key)

查找所有元素value:
scan(cursor=0, match=None, count=None)

data=redis_connection.zscan("AWS_Landsat_01010110001010101010011010100110")#针对zset数据结构
print(type(data))
print(data)


# 其他数据结构:
print(r.hscan("hash2"))
print(r.sscan("set3"))
print(r.zscan("zset2"))
print(r.getrange("foo1", 0, -1))
print(r.lrange("list2", 0, -1))
print(r.smembers("set3"))
print(r.zrange("zset3", 0, -1))
print(r.hgetall("hash1"))12345678

查看所有元素–迭代器
scan_iter(match=None, count=None)

data=redis_connection.zscan_iter("AWS_Landsat_01010110001010101010011010100110")#针对zset数据结构
print(type(data))
print(data)
for d in data:
    print(d)
举报

相关推荐

0 条评论