представлять
При использовании Mybatis вы можете использовать вторичный кэш для увеличения скорости запросов и, таким образом, улучшить пользовательский опыт.
Используйте Redis, чтобы сделать вторичный кэш Mybatis, но память контролируется. Если отдельный сервер развернут для вторичного кэша>, им легко управлять.
1. Интродуцировать зависимости Redis в файле pom.xml
<Depective> <groupid> org.springframework.boot </GroupId> <artifactid> Spring-boot-starter-data-redis </artifactid> </deperency>
2. Настройка REDIS в файле конфигурации Application.Properties
## redis spring.redis.database = 0spring.redis.host = 172.16.3.123spring.redis.port = 6379spring.redis.password = spring.redis.pool.ma x-active = 8spring.redis.pool.max-wait = -1spring.redis.pool.max-idle = 8spring.redis.pool.min-idle = 0spring.redis.timeout = 0
3. Создайте пакет кэша, а затем создайте два класса, один ApplicationContextholder реализует интерфейс ApplicationContextaware. Конкретный контент заключается в следующем
Пакет com.ruijie.springbootandredis.cache; import org.springframework.beans.beansexception; import org.springframework.context.applicationContext; import org.springframework.context.ApplicationContextAwar реализует ApplicationContextAware {Private Static ApplicationContext ApplicationContext; @Override public void setApplicationContext (ApplicationContext ctx) Throws BeanSexception {ApplicationContext = ctx; } / ** * Получить контекст приложения из везда * * @return * / public static applicateContext getApplicationContext () {return ApplicationContext; } / ** * Get Bean By Class * * @param clazz * @param <t> * @return * / public static <t> t getbean (class <t> clazz) {return applicateContext.getBean (clazz); } / ** * Get Bean по имени класс * * @param name * @param <t> * @return * / public static <t> t getbean (string name) {return (t) ApplicationContext.getBean (name); }}4. Создайте класс Refiscache для реализации интерфейса кэша, конкретный контент заключается в следующем:
пакет com.ruijie.springbootandredis.cache; import org.apache.ibatis.cache.cache; импорт org.slf4j.logger; импорт org.slf4j.loggerfactory; импорт org.springframework.data.redis.corescallback; org.springframework.data.redis.core.redistemplate; импорт org.springframework.data.redis.core.valueoperations; import java.util.concurrent.timeUnit; import java.util.concurrent.lock.readwritelock; import java.util.concurrentlockedlock. Resiscache реализует кэш {private static final logger logger = loggerfactory.getLogger (rediscache.class); Private Final ReadWritelock ReadWritelock = new ReenterTreadWriteLock (); Частный финальный идентификатор строки; // идентификатор экземпляра кэша частного Redistemplate Redistemplate; Частная статическая конечная длинная срок действия истечения_time_in_minutes = 30; // Redis Time Time Public resiscache (String Id) {if (id == null) {бросить новый allosalArgumentException ("экземпляры кэша требуют идентификатора"); } this.id = id; } @Override public String getId () {return id; } / ** * Поместите результат запроса в Redis * * @param Key * @param value * / @override public void putobject (ключ объекта, значение объекта) {try {redistemplate redistemplate = getredistemplate (); ValueOperations opsforvalue = Redistemplate.OpsForValue (); opsforvalue.set (ключ, значение, истечение срокатиза_ина_minutes, timeUnit.minutes); logger.debug («Поместить результат запроса в Redis»); } catch (throwable t) {logger.error ("redis put не удалось", t); }} / ** * Получить результат кэшированного запроса от redis * * @param key * @return * / @override public object getObject (object key) {try {redistemplate redistemplate = getRedistemplate (); ValueOperations opsforvalue = Redistemplate.OpsForValue (); logger.debug («Получить кэшированный результат запроса от Redis»); System.out.println ("****"+opsforvalue.get (key) .toString ()); return opsforvalue.get (key); } catch (throwable t) {logger.error ("redis get не удалось, не удастся до db", t); вернуть ноль; }} / ** * Удалить результат кэшированного запроса из redis * * @param key * @return * / @override @suppresswarnings ("uncecked") public overse removeObject (объект Key) {try {redistemplate redistemplate = getRedistemplate (); Redistemplate.delete (Key); logger.debug ("удалить кэшированный запрос результат из Redis"); } catch (throwable t) {logger.error ("redis удалил неудачный", t); } return null; } / ** * очищает этот экземпляр кэша * / @Override public void clear () {redistemplate redistemplate = getRedistemplate (); redistemplate.execute ((rediscallback) connection -> {connection.flushdb (); return null;}); logger.debug («Очистить все кэшированные результаты запроса от Redis»); } / ** * Этот метод не используется * * @return * / @Override public int getSize () {return 0; } @Override public readWritelock getReadWriteLock () {return ReadWritelock; } private redistemplate getRedistemplate () {if (redistemplate == null) {redistemplate = ApplicationContextholder.getbean ("Redistemplate"); } return redistemplate; }}5. Сериализуемый интерфейс должен быть реализован в классе объектов, а номер последовательности должен быть объявлен.
Частный статический последний длинный сериал -версии = -2566441764189220519L;
6. Включите кэш 2 уровня Mybatis 2
Настройка в файле конфигурации pom.xml
mybatis.configuration.cache-inablet = true
Добавить в интерфейс Mapper
@Cachenamespace (реализация = (com.demo.testdemo.cache.rediscache.class))
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.