Home  >  Article  >  Backend Development  >  Redis obtains the key script instance of a certain prefix

Redis obtains the key script instance of a certain prefix

不言
不言Original
2018-05-18 15:28:264152browse

This article mainly introduces to you the relevant information about the key script for Redis to obtain a certain prefix. The article introduces it in detail through the example code. It has certain reference learning value for everyone to learn or use Redis. Friends who need it Let’s learn with the editor below.

1. Background

#In daily maintenance, we often encounter the need to count the number of keys with a certain prefix. In redis with many requests, keys * will directly cause blocking.
Scan can be used for incremental iteration, and query uses pipeline to reduce interaction and improve efficiency.

2. Advantages and Disadvantages of the scan command

The SCAN commands include SCAN, SSCAN, HSCAN, and ZSCAN.

SCAN is to traverse all keys

For other SCAN commands, it is the set selected by SCAN.

The SCAN command is an incremental loop, and each call will only return a small number of elements. So there will be no pitfalls with the KEYS command.

The SCAN command returns a cursor that starts traversing from 0 and ends at 0.

scan 0
1) "655"
2) 1) "test1"
  2) "test2"

The return value is an array, one is the cursorId of the next cycle, and the other is the element array. The SCAN command cannot guarantee that the values ​​returned each time are in order. In addition, the same key may be returned multiple times without distinction, which requires application processing.

In addition, the SCAN command can specify COUNT, which defaults to 10. But this does not mean how many items will be returned by specifying it. This is just a reminder, and there is no guarantee that so many items will be returned.

Advantages:

  • # Provides key space traversal operations, supports cursors, complexity O(1), and the entire traversal only needs one pass Requires O(N);

  • Provides result pattern matching;

  • supports setting the number of data items returned at one time, but it is only a hint. There will be more returned;

  • Weak state, all states only require the client to maintain a cursor;

Disadvantages:

  • cannot provide a complete snapshot traversal, that is, if there are data modifications in the middle, some data involved in the changes may not be traversed;

  • The number of data returned each time is not necessarily certain, and it is extremely dependent on the internal implementation;

  • The returned data may be repeated, and the application layer must be able to handle reentrancy logic;

3. Implementation of python script

There is an encapsulated function scan_iter in python--view all elements- -Iterator

Script content:

#!/usr/bin/env python
# -*- coding: UTF-8 -*- 
#作用:统计某个前缀key的个数,并将其输入到文件
#使用方法:python scan_redis.py apus* 100
__author__ = "lcl" 
import sys
import redis 
import os 
pool=redis.ConnectionPool(host='192.168.225.128',port=6379,db=0) 
r = redis.StrictRedis(connection_pool=pool) 
#扫描匹配值,通过sys.argv传参
match = sys.argv[1]
#每次匹配数量
count = sys.argv[2]
#print match
#print count
#总数量
total = 0
#扫描到的key输出到文件
path = os.getcwd()
#扫描到的key输出的文件
txt = path+"/keys.txt"
f = open(txt,"w")
for key in r.scan_iter(match = match,count = count):
# f.write("%s %s" % (key,"\n"))
 f.write(key+"\n")
 total = total+1
f.close
print "匹配: %s 的数量为:%d " % (match,total)

Related recommendations:

php using redis Cache instance

The above is the detailed content of Redis obtains the key script instance of a certain prefix. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn