You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I encountered an infinite loop while using the SCAN command with pattern matching in Redis via AWS ElastiCache.
The issue arises when querying Redis for keys using a pattern (users:*). The loop keeps executing even when no more keys match the given pattern.
Below code to reproduce the issue
asyncfunctiongetActiveUsers(redisClient){constactiveUserQueryPattern=`users:*`;letcursor=0;letactiveUsers=[];console.log("Querying Redis for Active Users pattern :: ",activeUserQueryPattern);do{constuserQueryData=awaitredisClient.scan(cursor,{MATCH: activeUserQueryPattern,COUNT: 100,});console.log("User Query Data :: ",userQueryData);activeUsers=activeUsers.concat(userQueryData.keys);cursor=userQueryData.cursor;}while(cursor!==0);console.log('Active Users :: ',activeUsers);returnactiveUsers;}
I have fixed with checking keys length for now, but actually the cursor will return with zero, if there is not keys.
asyncfunctiongetActiveUsers(redisClient){constactiveUserQueryPattern=`users:*`;letkeyLen=1;letactiveUsers=[];console.log("Querying Redis for Active Users pattern :: ",activeUserQueryPattern);do{constuserQueryData=awaitredisClient.scan(cursor,{MATCH: activeUserQueryPattern,COUNT: 100,});console.log("User Query Data :: ",userQueryData);activeUsers=activeUsers.concat(userQueryData.keys);keyLen=userQueryData.keys.length;}while(keyLen!==0);console.log('Active Users :: ',activeUsers);returnactiveUsers;}
Node.js Version
node v18.18.0
Redis Server Version
ElasticCache (Redis Version 7.1)
Node Redis Version
4.7.0
Platform
Windows
Logs
2024-12-07T15:33:22.237+05:30
2024-12-07T10:03:22.237Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.247+05:30
2024-12-07T10:03:22.247Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.249+05:30
2024-12-07T10:03:22.249Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.252+05:30
2024-12-07T10:03:22.252Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.255+05:30
2024-12-07T10:03:22.255Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.267+05:30
2024-12-07T10:03:22.267Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.270+05:30
2024-12-07T10:03:22.270Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.272+05:30
2024-12-07T10:03:22.272Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.275+05:30
2024-12-07T10:03:22.275Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.290+05:30
2024-12-07T10:03:22.290Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.292+05:30
2024-12-07T10:03:22.292Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.294+05:30
2024-12-07T10:03:22.294Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.307+05:30
2024-12-07T10:03:22.307Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.310+05:30
2024-12-07T10:03:22.310Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.312+05:30
2024-12-07T10:03:22.312Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
The text was updated successfully, but these errors were encountered:
Description
I encountered an infinite loop while using the SCAN command with pattern matching in Redis via AWS ElastiCache.
The issue arises when querying Redis for keys using a pattern
(users:*)
. The loop keeps executing even when no more keys match the given pattern.Below code to reproduce the issue
I have fixed with checking keys length for now, but actually the cursor will return with zero, if there is not keys.
Node.js Version
node v18.18.0
Redis Server Version
ElasticCache (Redis Version 7.1)
Node Redis Version
4.7.0
Platform
Windows
Logs
The text was updated successfully, but these errors were encountered: