복붙노트

[REDIS] 최대 절전 모드 두 번째 레벨 캐시로 레디 스

REDIS

최대 절전 모드 두 번째 레벨 캐시로 레디 스

최대 절전 모드 두 번째 캐시 레벨로 사용 레디 스 : 나는 미친 생각을 가지고있다. 레디 스는 목표는 많은 바람둥이 노드 사이의 최대 절전 모드 캐시를 공유하는 것입니다 .. 그것은 복제, 파이프 라인 등을 지원, 인 - 메모리 데이터 저장소입니다. 기본 구현은 하이버 네이트 캐시 개체의 키와 값을 serailize와 레디 스 데이터베이스에 모두 저장해야합니다. 당신은 그 생각에 대해 어떻게 생각하십니까?

친애하는,

줄리어스

해결법

  1. ==============================

    1.나는 레디 스와 최대 절전 모드 2 차 레벨 캐시를 만든

    나는 레디 스와 최대 절전 모드 2 차 레벨 캐시를 만든

    확인해 봐!

    https://github.com/debop/hibernate-redis

  2. ==============================

    2.그냥은 그것에 GitHub의 프로젝트를 발견했다. https://github.com/debop/hibernate-redis 나는 이미 끝났다 생각합니다. 그것은 몇 가지 문서를 실종. 편집 : 그냥 더 나은 설명서와 함께, 더 나은 저장소를 발견했다. https://github.com/Jongtae/hibernate-redis

    그냥은 그것에 GitHub의 프로젝트를 발견했다. https://github.com/debop/hibernate-redis 나는 이미 끝났다 생각합니다. 그것은 몇 가지 문서를 실종. 편집 : 그냥 더 나은 설명서와 함께, 더 나은 저장소를 발견했다. https://github.com/Jongtae/hibernate-redis

    구축 프로젝트에 라이브러리를 가져온 후, 어떤 두 번째 레벨 캐시로 간단합니다.

    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.cache.region.factory_class">net.daum.clix.hibernate.redis.RedisRegionFactory
    </property>
    <property name="redis.host">"redis.host"</property>
    

    내가 일하고 있어요 웹 사이트의 일부 기능에 레디 스를 사용하여 생각하고 있어요. 다른 흥미로운 가능성 : 세션 관리자 바람둥이, 잠금 분산.

  3. ==============================

    3.Redisson 프레임 워크 구현은 하이버 네이트 캐시 기반 레디 스. 그것은 최대 절전 모드 5.3 및 5.4을 지원합니다.

    Redisson 프레임 워크 구현은 하이버 네이트 캐시 기반 레디 스. 그것은 최대 절전 모드 5.3 및 5.4을 지원합니다.

    자세한 내용은 설명서를 참조하십시오.

  4. ==============================

    4.나는 그것이 멋진 아이디어라고 생각. 다음은 시작하는 몇 가지 코드입니다

    나는 그것이 멋진 아이디어라고 생각. 다음은 시작하는 몇 가지 코드입니다

    Grails는, 예를 들어, 레디 스 대신 최대 절전 모드의 plugginable 백엔드, 당신은 정말 최대 절전 모드의 복잡성을 필요로하지 않는 한, 내가 갈 수있는 올바른 방법이 될 것 대신 생각합니다.

    그러나 레디 스에서 그 최대 절전 모드 엔티티를 유지하는 능력 (예를 들어를 통해 JRedis)를 가지고도 (최대 절전 모드) 복잡성이 진정으로 필요하다고 경우에 좋을 것이다.

  5. ==============================

    5.나는 당신의 생각은 좋은 생각합니다. memcached를 위해 나는 최대 절전 모드 2 차 레벨 캐시 제공자를 보았다. 어쩌면 그것은 또한 당신을 도울 수있는 (즉 - 레디 스 작업을위한 그것에서 몇 가지 아이디어를 얻을) 당신은 GitHub의 또는 googlecode 또는 기타 장소에 원본이 작업을 열 수 있다면 감사하겠습니다.

    나는 당신의 생각은 좋은 생각합니다. memcached를 위해 나는 최대 절전 모드 2 차 레벨 캐시 제공자를 보았다. 어쩌면 그것은 또한 당신을 도울 수있는 (즉 - 레디 스 작업을위한 그것에서 몇 가지 아이디어를 얻을) 당신은 GitHub의 또는 googlecode 또는 기타 장소에 원본이 작업을 열 수 있다면 감사하겠습니다.

  6. ==============================

    6.나는 봄 부팅과 Redisson을 사용하고이 구성 매우 간단합니다.

    나는 봄 부팅과 Redisson을 사용하고이 구성 매우 간단합니다.

    그냥 다음을 추가합니다 :

    implementation 'org.redisson:redisson-spring-boot-starter:3.10.2'
    implementation 'org.redisson:redisson-hibernate-53:3.10.2'
    

    application.yml

    jpa:
      generate-ddl: false
      show-sql: false
      properties:
        hibernate:
          ddl-auto: create
          dialect: com.codefish.model.hibernate.MySqlDialect
          generate_statistics: false
          show_sql: false
          use_sql_comments: false
          format_sql: true
          cache:
            use_second_level_cache: true
            use_query_cache: false
            region.factory_class: com.eddress.config.RegionFactory
    

    RedisConfig

    @Configuration
    public class RedisConfig {
    
    @Value("${spring.redis.master:#{null}}")
    public String redisMaster;
    
    @Value("${spring.redis.slave:#{null}}")
    public String redisSlave;
    
    @Value("${spring.redis.password:#{null}}")
    public String redisPassword;
    
    @Bean
    public RedissonConnectionFactory redissonConnectionFactory(RedissonClient redisson) {
        return new RedissonConnectionFactory(redisson);
    }
    
    @Bean(destroyMethod = "shutdown")
    public RedissonClient redisson() {
        return Redisson.create(buildConfigFile(redisMaster,redisSlave, redisPassword));
    }
    
    public static Config buildConfigFile(String redisMaster,String redisSlave, String password){
    
        if (Preconditions.isEmpty(redisMaster)) redisMaster = "localhost";
        if (Preconditions.isEmpty(password)) password = null;
    
        Config config = new Config().setTransportMode(TransportMode.NIO).setCodec(new SnappyCodecV2());
    
        if (Preconditions.notBlank(redisSlave)){
            config.useMasterSlaveServers()
                    .setMasterAddress("redis://"+redisMaster+":6379")
                    .addSlaveAddress("redis://"+redisSlave+":6379")
                    .setPassword(password)
                    .setIdleConnectionTimeout(10000)
                    .setTimeout(10000);
        }
        else{
            config.useSingleServer()
                    .setAddress("redis://"+redisMaster+":6379")
                    .setPassword(password)
                    .setIdleConnectionTimeout(10000)
                    .setTimeout(10000);
        }
    
        return config;
    }
    
    @Bean
    CacheManager cacheManager(RedissonClient redissonClient) {
        Map<String, CacheConfig> config = new HashMap<>();
        // create "testMap" cache with ttl = 24 minutes and maxIdleTime = 12 minutes
        CacheConfig configItem = new CacheConfig(TimeUnit.MINUTES.toMillis(60), TimeUnit.MINUTES.toMillis(30));
        config.put("domainCache",configItem);
        return new RedissonSpringCacheManager(redissonClient, config);
    }
    

    RegionFactory

    public class RegionFactory extends org.redisson.hibernate.RedissonRegionFactory {
    
        @Override
        protected RedissonClient createRedissonClient(Map properties) {
    
            String master = System.getProperty("REDIS_MASTER");
            String slave = System.getProperty("REDIS_SLAVE");
            String password = System.getProperty("REDIS_PASSWORD");
            Config config = RedisConfig.buildConfigFile(master,slave, password);
            return Redisson.create(config);
    
        }
    
    }
    
  7. from https://stackoverflow.com/questions/7650129/redis-as-hibernate-second-level-cache by cc-by-sa and MIT license