Skip to content

Ahoo-Wang/CoCache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CoCache

Level 2 Distributed Coherence Cache Framework

License GitHub release Maven Central Codacy Badge codecov Integration Test Status

Architecture

Architecture

Installation

Use Gradle(Kotlin) to install dependencies

implementation("me.ahoo.cocache:cocache-spring-boot-starter")

Use Gradle(Groovy) to install dependencies

implementation 'me.ahoo.cocache:cocache-spring-boot-starter'

Use Maven to install dependencies

<dependency>
    <groupId>me.ahoo.cocache</groupId>
    <artifactId>cocache-spring-boot-starter</artifactId>
    <version>${cocache.version}</version>
</dependency>

Usage

classDiagram
direction BT
class Cache~K, V~ {
<<Interface>>
  + set(K, Long, V) Unit
  + getCache(K) CacheValue~V~?
  + set(K, Long, V) Unit
  + set(K, V) Unit
  + get(K) V?
  + set(K, V) Unit
  + get(K) V?
  + getTtlAt(K) Long?
  + setCache(K, CacheValue~V~) Unit
  + getTtlAt(K) Long?
  + evict(K) Unit
}
class CacheGetter~K, V~ {
<<Interface>>
  + get(K) V?
}
class CacheSource~K, V~ {
<<Interface>>
  + load(K) CacheValue~V~?
  + noOp() CacheSource~K, V~
}
class UserCache {
  + set(String, UserData) Unit
  + setCache(String, CacheValue~UserData~) Unit
  + getCache(String) CacheValue~UserData~?
  + evict(String) Unit
  + get(String) UserData?
  + getTtlAt(String) Long?
  + set(String, Long, UserData) Unit
}
class UserCacheSource {
  + load(String) CacheValue~UserData~?
}

Cache~K, V~  -->  CacheGetter~K, V~ 
UserCache  ..>  Cache~K, V~ 
UserCacheSource  ..>  CacheSource~K, V~ 
Loading
/**
 * 定义缓存接口
 * 可选的配置
 */
@CoCache
/**
 * 可选的配置
 */
@GuavaCache(
    maximumSize = 1000_000,
    expireUnit = TimeUnit.SECONDS,
    expireAfterAccess = 120
)
/**
 * 可选的配置
 */
@MissingGuardCache(ttlSeconds = 120)
interface UserCache : Cache<String, User>

@EnableCoCache(caches = [UserCache::class])
@SpringBootApplication
class AppServer

/**
 * 可选的配置
 */
@Configuration
class UserCacheConfiguration {
    @Bean
    fun customizeUserClientSideCache(): ClientSideCache<User> {
        return MapClientSideCache()
    }

    @Bean
    fun customizeUserCacheSource(): CacheSource<String, User> {
        return CacheSource.noOp()
    }
}

CoCache Get Sequence Diagram

CoCache-Get-Sequence-Diagram

JoinCache Get Sequence Diagram

JoinCache-Get-Sequence-Diagram