义齿

4691 ワード

統合手順
springbootの開梱と使用の特徴から、springboot統合redisは非常に簡単であることが予想されます.次の手順に従います.
1、インポート依存
この依存はspringboot統合Redisのstarter依存である


    org.springframework.boot
    spring-boot-starter-data-redis


2、Redis接続属性の構成
springbootプライマリプロファイルで次のプロパティを構成します.
# Redis     (   0)
spring.redis.database=0
# Redis     
spring.redis.host=127.0.0.1
#Redis       
spring.redis.port=6379
# Redis       (    )
spring.redis.password=
#        (          )
spring.redis.pool.max-active=8
#            (          )
spring.redis.pool.max-wait=-1
#            
spring.redis.pool.max-idle=8
#            
spring.redis.pool.min-idle=0
#       (  )
spring.redis.timeout=0

3,注入RedisTemplateクラス
RedisTemplateはspringパッケージの操作redisのテンプレートオブジェクトであり、redisの様々なデータ構造を容易に操作でき、上記の2つの統合ステップを経てspringbootは自動的にRedisTemplateオブジェクトを作成し、springコンテナに管理するので、springコンテナからオブジェクトを取得するだけでよい
@Autowired
RedisTemplate redisTemplata;

mybatisキャッシュとしてRedisを使用
分散アプリケーションでは、mybatisの2次キャッシュを使用する必要がある場合、ehcacheなどのインラインキャッシュは使用できません.キャッシュデータが同期しないという問題が発生するため、Redisのような分散キャッシュを使用する必要があります.上記の統合手順でspringコンテナ内のRedisTemplateオブジェクトを取得できます.このRedisTemplateオブジェクトがあれば、Mybatis 2次キャッシュを開き、RedisTemplateオブジェクトでRedisを操作できます.具体的な使用手順は次のとおりです.
1、spring環境コンテキストオブジェクトを取得するためのツールクラスを作成する
なぜこのツールクラスがあるのですか?mybatisの2次キャッシュクラスはmybatisによって作成する必要があるため、各mapperオブジェクトはspringによって作成できないキャッシュオブジェクトインスタンスを作成します.RedisTemplateオブジェクトはspringによって作成されるので、springコンテナ以外のオブジェクトでspringキャパシタオブジェクトを取得するには@Autowired注記で直接注入することはできません.spring環境コンテキストのみで取得できます
/**
 *   spring        ,     spring         ,
 *         , spring            setApplicationContext  
 *    spring     ApplicationContext  ,  :      spring    
 *   spring         setApplicationContext  。
 */
@Component
public class ApplicationContextHolder implements ApplicationContextAware{

    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        ApplicationContextHolder.applicationContext = applicationContext;
    }

    public static T getBean(String beanName){
        return (T) applicationContext.getBean(beanName);
    }
}

2、mybatis二次キャッシュクラスの作成
mybatisの2次キャッシュ機能を使用する必要があるツールクラスは、mybatisのキャッシュインタフェース:org.apache.ibatis.cache.Cacheを実現する必要があります.そのため、mybatisRedisCacheクラスをカスタマイズし、mybatisのCacheインタフェースを実現し、このインタフェース上の抽象的な方法を実現します.以下は完全なコードです.
public class MybatisRedisCache implements Cache{

    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true);

    //  spring    RedisTemplate  
    RedisTemplate redisTemplate = ApplicationContextHolder.getBean("redisTemplate");

    // id mybatis mapper      
    private String id;

    public MybatisRedisCache(String id){
        this.id = id;
    }

    @Override
    public String getId() {
        return this.id;
    }

    /**
     * @param key          
     * @param value       
     */
    @Override
    public void putObject(Object key, Object value) {
        Map map = (Map) redisTemplate.opsForValue().get(id);
        if(map == null){
            map = new HashMap();
        }
        map.put(key,value);
        redisTemplate.opsForValue().set(id,map);
    }

    @Override
    public Object getObject(Object key) {
        Map map = (Map) redisTemplate.opsForValue().get(id);
        if(map != null){
            if(map.containsKey(key)){
                return map.get(key);
            }
        }
        return null;
    }

    @Override
    public Object removeObject(Object key) {
        Map map = (Map) redisTemplate.opsForValue().get(id);
        if(map != null){
            if(map.containsKey(key)){
                return map.remove(key);
            }
        }
        return null;
    }

    @Override
    public void clear() {
        redisTemplate.delete(id);
    }

    @Override
    public int getSize() {
        Map map = (Map) redisTemplate.opsForValue().get(id);
        if(map != null){
            return map.size();
        }
        return 0;
    }

    @Override
    public ReadWriteLock getReadWriteLock() {
        return readWriteLock;
    }
}

3、二次キャッシュの使用
2次キャッシュを使用するmapperファイルにラベルを追加するには