I am trying to find out values stored in a list of keys which match a pattern from redis. I tried using SCAN
so that later on i can use MGET
to get all the values, The problem is:
SCAN 0 MATCH "foo:bar:*" COUNT 1000
does not return any value whereas
SCAN 0 MATCH "foo:bar:*" COUNT 10000
returns the desired keys. How do i force SCAN
to look through all the existing keys? Do I have to look into lua for this?
To list the keys in the Redis data store, use the KEYS command followed by a specific pattern. Redis will search the keys for all the keys matching the specified pattern. In our example, we can use an asterisk (*) to match all the keys in the data store to get all the keys.
SCAN COUNT The count command allows you to modify how many keys the SCAN command will fetch per call. By default, the SCAN command fetches ten keys. However, we can modify this by setting the count command. In this example, we set the cursor to return 15 elements instead of the default 10.
The Redis SCAN command is used in order to incrementally iterate over a collection of elements. SCAN is a cursor based iterator. This means that at every call of the command, the server returns an updated cursor that the user needs to use as the cursor argument in the next call.
So yes, SCAN is blocking, but it's usually not a big deal, and is only blocking when Redis is actually processing the command.
With the code below you will scan the 1000 first object from cursor 0
SCAN 0 MATCH "foo:bar:*" COUNT 1000
In result, you will get a new cursor to recall
SCAN YOUR_NEW_CURSOR MATCH "foo:bar:*" COUNT 1000
To scan 1000 next object. Then when you increase COUNT
from 1000 to 10000 and retrieve data you scan more keys then in your case match more keys.
To scan the entire list you need to recall SCAN
until the cursor give in response return zero (i.e entire scan)
Use INFO
command to get your amount of keys like
db0:keys=YOUR_AMOUNT_OF_KEYS,expires=0,avg_ttl=0
Then call
SCAN 0 MATCH "foo:bar:*" COUNT YOUR_AMOUNT_OF_KEYS
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With