@@ -77,6 +77,17 @@ export const getRedisOptions = (
7777 reconnectOnError : ( error ) => {
7878 // eslint-disable-next-line require-unicode-regexp
7979 const targetErrors = [ / M O V E D / , / R E A D O N L Y / , / E T I M E D O U T / ] ;
80+
81+ logger . error ( 'Redis reconnect error:' , error ) ;
82+ if ( error . message . includes ( 'MOVED' ) && redisClient instanceof Cluster ) {
83+ logger . error ( 'Refreshing Redis Cluster slots cache' ) ;
84+ try {
85+ redisClient ?. refreshSlotsCache ( ) ;
86+ } catch ( error ) {
87+ logger . error ( 'Error refreshing Redis Cluster slots cache:' , error ) ;
88+ }
89+ }
90+
8091 return targetErrors . some ( ( targetError ) =>
8192 targetError . test ( error . message ) ,
8293 ) ;
@@ -100,9 +111,9 @@ export const getRedisClient = () => {
100111 const redisClusterOptions : ClusterOptions = {
101112 dnsLookup : ( address , callback ) => callback ( null , address ) ,
102113 scaleReads : 'slave' ,
103- slotsRefreshTimeout : 2000 ,
114+ slotsRefreshTimeout : 5000 ,
104115 showFriendlyErrorStack : true ,
105- slotsRefreshInterval : 4000 ,
116+ slotsRefreshInterval : 2000 ,
106117 clusterRetryStrategy : ( times ) => Math . min ( times * 30 , 1000 ) ,
107118 enableAutoPipelining : true ,
108119 redisOptions,
@@ -120,6 +131,19 @@ export const getRedisClient = () => {
120131 }
121132 }
122133
134+ redisClient . on ( 'ready' , ( ) => {
135+ logger . info ( 'Redis ready' ) ;
136+
137+ if ( redisClient instanceof Cluster ) {
138+ logger . error ( 'Refreshing Redis Cluster slots cache' ) ;
139+ try {
140+ redisClient ?. refreshSlotsCache ( ) ;
141+ } catch ( error ) {
142+ logger . error ( 'Error refreshing Redis Cluster slots cache:' , error ) ;
143+ }
144+ }
145+ } ) ;
146+
123147 redisClient . on ( 'error' , ( error ) => {
124148 logger . error ( 'Redis error:' , error ) ;
125149 } ) ;
0 commit comments