@@ -55,9 +55,26 @@ public Task SetAsync<T>(string key, T value, TimeSpan ttl)
5555 return hzCache . SetAsync ( key , value , ttl ) ;
5656 }
5757
58- public Task < T > GetOrSetAsync < T > ( string key , Func < string , Task < T > > valueFactory , TimeSpan ttl , long maxMsToWaitForFactory = 10000 )
58+ public async Task < T > GetOrSetAsync < T > ( string key , Func < string , Task < T > > valueFactory , TimeSpan ttl , long maxMsToWaitForFactory = 10000 )
5959 {
60- return hzCache . GetOrSetAsync ( key , valueFactory , ttl , maxMsToWaitForFactory ) ;
60+ var value = await hzCache . GetAsync < T > ( key ) ;
61+ if ( value != null )
62+ {
63+ return value ;
64+ }
65+
66+ if ( options . useRedisAs2ndLevelCache )
67+ {
68+ var redisValue = await GetRedisValueAsync ( key ) ;
69+ if ( ! redisValue . IsNull )
70+ {
71+ var ttlValue = await TTLValue . FromRedisValueAsync < T > ( Encoding . ASCII . GetBytes ( redisValue . ToString ( ) ) ) ;
72+ hzCache . SetRaw ( key , ttlValue ) ;
73+ return ( T ) ttlValue . value ;
74+ }
75+ }
76+
77+ return await hzCache . GetOrSetAsync ( key , valueFactory , ttl , maxMsToWaitForFactory ) ;
6178 }
6279
6380 public Task < IList < T > > GetOrSetBatchAsync < T > ( IList < string > keys , Func < IList < string > , Task < List < KeyValuePair < string , T > > > > valueFactory )
@@ -67,7 +84,8 @@ public Task<IList<T>> GetOrSetBatchAsync<T>(IList<string> keys, Func<IList<strin
6784
6885 public async Task < IList < T > > GetOrSetBatchAsync < T > ( IList < string > keys , Func < IList < string > , Task < List < KeyValuePair < string , T > > > > valueFactory , TimeSpan ttl )
6986 {
70- using var activity = HzActivities . Source . StartActivityWithCommonTags ( HzActivities . Names . GetOrSetBatch , HzActivities . Area . RedisBackedHzCache , async: true , key : string . Join ( "," , keys ?? new List < string > ( ) ) ) ;
87+ using var activity = HzActivities . Source . StartActivityWithCommonTags ( HzActivities . Names . GetOrSetBatch , HzActivities . Area . RedisBackedHzCache , async: true ,
88+ key : string . Join ( "," , keys ?? new List < string > ( ) ) ) ;
7189 Func < IList < string > , Task < List < KeyValuePair < string , T > > > > redisFactory = async idList =>
7290 {
7391 // Create a list of redis keys from the list of cache keys
@@ -127,4 +145,4 @@ public Task<bool> RemoveAsync(string key)
127145 return hzCache . RemoveAsync ( key ) ;
128146 }
129147 }
130- }
148+ }
0 commit comments