package Ġcom . solution . pro de . configuration Ċ Ċ import Ġcom . solution . pro de . constants . Redis T tl . DAY Ċ import Ġjava . time . Duration Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . cache . Cache Ċ import Ġorg . springframework . cache . CacheManager Ċ import Ġorg . springframework . cache . annotation . Caching Configurer Support Ċ import Ġorg . springframework . cache . annotation . Enable Caching Ċ import Ġorg . springframework . cache . interceptor . Cache ErrorHandler Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . data . redis . cache . Redis Cache Configuration Ċ import Ġorg . springframework . data . redis . cache . Redis CacheManager Ċ import Ġorg . springframework . data . redis . connection . Redis ConnectionFactory Ċ import Ġorg . springframework . data . redis . connection . Redis Standalone Configuration Ċ import Ġorg . springframework . data . redis . connection . j edis . J edis Client Configuration Ċ import Ġorg . springframework . data . redis . connection . j edis . J edis ConnectionFactory Ċ import Ġorg . springframework . data . redis . serializer . J dk Serialization Redis Serializer Ċ import Ġorg . springframework . data . redis . serializer . Redis Serialization Context Ċ import Ġredis . clients . j edis . J edis Pool Config Ċ Ċ @ Configuration Ċ @ Enable Caching Ċ class ĠCache Configuration Ġ: ĠC aching Configurer Support () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Cache Configuration :: class . java ) ĊĊĠĠĠ Ġ@ Value ("\ ${ REDIS _ HOST }") ĊĠĠĠ Ġprivate Ġval Ġredis Host : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ@ Value ("\ ${ REDIS _ PORT }") ĊĠĠĠ Ġprivate Ġval Ġredis Port : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Value ("\ ${ REDIS _ MAX _ CONNECTION S }") ĊĠĠĠ Ġprivate Ġval Ġmax Connections : ĠInt Ġ= Ġ 1 0 ĊĊĠĠĠ Ġ@ Value ("\ ${ REDIS _ MIN _ IDLE }") ĊĠĠĠ Ġprivate Ġval Ġmin Idle : ĠInt Ġ= Ġ 2 ĊĊĠĠĠ Ġ@ Value ("\ ${ REDIS _ MAX _ IDLE }") ĊĠĠĠ Ġprivate Ġval Ġmax Idle : ĠInt Ġ= Ġ 4 ĊĊĠĠĠ Ġ@ Value ("\ ${ REDIS _ CONNECTION _ TIME _ OUT }") ĊĠĠĠ Ġprivate Ġval Ġconnection TimeOut : ĠLong Ġ= Ġ 1 0 ĊĊĠĠĠ Ġ@ Value ("\ ${ REDIS _ DEFAULT _ EXPI RE _ TIME _ SEG }") ĊĠĠĠ Ġprivate Ġval Ġdefault Expire Time : ĠLong Ġ= Ġ 3 0 0 ĊĊĠĠĠ Ġ@ Value ("\ ${ REDIS _ MAX _ WAIT _ M ILL IS }") ĊĠĠĠ Ġprivate Ġval Ġredis Max Wait : ĠLong Ġ= Ġ 5 0 0 0 ĊĊĠĠĠ Ġ@ Value ("\ ${ REDIS _ MIN _ E VI CT ABLE _ TABLE _ TIME _ M ILL IS }") ĊĠĠĠ Ġprivate Ġval Ġredis Min Ev ict able Idle Time Millis : ĠLong Ġ= Ġ 3 0 0 0 0 0 ĊĊĠĠĠ Ġfun Ġjed is Pool Config (): ĠJ edis Pool Config Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpool Configuration Ġ= ĠJ edis Pool Config () ĊĊĠĠĠĠĠĠĠ Ġpool Configuration . max Total Ġ= Ġmax Connections ĊĠĠĠĠĠĠĠ Ġpool Configuration . min Idle Ġ= Ġmin Idle ĊĠĠĠĠĠĠĠ Ġpool Configuration . max Idle Ġ= Ġmax Idle ĊĠĠĠĠĠĠĠ Ġpool Configuration . max Wait Millis Ġ= Ġredis Max Wait ĊĠĠĠĠĠĠĠ Ġpool Configuration . min Ev ict able Idle Time Millis Ġ= Ġredis Min Ev ict able Idle Time Millis ĊĠĠĠĠĠĠĠ Ġpool Configuration . block When Ex hausted Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpool Configuration ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġredis ConnectionFactory (): ĠRedis ConnectionFactory Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġjed is Client Configuration Ġ= ĠJ edis Client Configuration . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( Duration . of Seconds ( connection TimeOut )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Pooling () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. pool Config ( this . j edis Pool Config ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠJ edis ConnectionFactory ( Redis Standalone Configuration ( redis Host , Ġredis Port ), Ġjed is Client Configuration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġredis Cache Configuration (): ĠRedis Cache Configuration Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġserialization Pair Ġ= ĠRedis Serialization Context . Serialization Pair . from Serializer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ dk Serialization Redis Serializer () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRedis Cache Configuration . default Cache Config () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. entry T tl ( Duration . of Seconds ( default Expire Time )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. serialize Values With ( serialization Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable Caching Null Values () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġoverride Ġfun Ġcache Manager (): ĠCache Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRedis CacheManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder ( this . redis ConnectionFactory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache Defaults ( redis Cache Configuration ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. transaction Aware () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget CacheManager By T tl ( ttl : ĠLong ): ĠRedis CacheManager Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= Ġthis . redis Cache Configuration (). entry T tl ( Duration . of Seconds ( ttl )) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRedis CacheManager . builder ( this . redis ConnectionFactory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache Defaults ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġfun Ġcache Manager One Day (): ĠCache Manager Ġ= Ġget CacheManager By T tl ( DAY ) ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġoverride Ġfun ĠerrorHandler (): ĠCache ErrorHandler Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠCache ErrorHandler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Cache Clear Error ( exception : Ġjava . lang . RuntimeException , Ġcache : ĠCache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Error Ġon Ġclear Ġcache : Ġ'{} '", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Cache Put Error ( exception : Ġjava . lang . RuntimeException , Ġcache : ĠCache , Ġkey : ĠAny , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Error Ġon Ġput Ġvalue Ġin Ġcache : Ġ'{} '", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Cache Ev ict Error ( exception : Ġjava . lang . RuntimeException , Ġcache : ĠCache , Ġkey : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Error Ġon Ġev ict Ġcache Ġvalue : Ġ'{} '", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Cache GetError ( exception : ĠRuntimeException , Ġcache : ĠCache , Ġkey : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Error Ġon Ġget Ġcache Ġvalue : Ġ'{} '", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ