Springcloud'un veri tabanını eklemek, silmek, değiştirmek ve kontrol etmek için nasıl çalıştırdığını ve springcloud'un verileri redis'te depolamak için reaktifleri nasıl çalıştırdığını öğrendi. Bugün, veritabanı işlemleri ve reids işlemleri ile birlikte, SpringCache'nin nasıl kullanılacağına bir göz atalım. SpringCache, açıklama tabanlı bir önbellek yapılandırma yöntemi sağlar. Esasen belirli bir önbellek uygulama şeması (EHCache gibi) değil, önbellek kullanımının bir soyutlaması ve kapsüllenmesidir.Varolan koda önceden tanımlanmış birkaç yorum ekleyerek, istenen önbellek etkisi elde edilebilir. SpringCache, EHCache ve Redis gibi üçüncü taraf önbellekleriyle entegrasyonu destekler; ayrıca doğrudan kullanılabilen, kutunun dışında varsayılan bir uygulama sağlar. SpringCache, önbellek anahtarını ve çeşitli koşulları tanımlamak için SpEL (Spring Expression Language) kullanımını destekler, bu nedenle önemli ölçüde esnekliğe sahiptir ve çok karmaşık semantiği destekleyebilir.
1. Yeni bir proje sc-redis-cache oluşturun ve kullanılan pom.xml dosyası aşağıdaki gibidir
< proje xmlns = " xmlns: xsi = " xsi: schemaLocation = "http: // maven.apache.org/POM/4.0.0 " >
< modelVersion > 4.0.0 < / modelVersion >
< Grup kimliği > bahar bulutu < /Grup kimliği >
< artifactId > sc-redis-önbelleği < / artifactId >
< versiyon > 0.0.1-SNAPSHOT < / version >
< ambalaj > kavanoz < / paketleme >
< isim > sc-redis-önbelleği < / isim >
< url > < / url >
< ebeveyn >
< Grup kimliği > org.springframework.boot < /Grup kimliği >
< artifactId > Spring-boot-starter-ebeveyn < / artifactId >
< versiyon > 2.0.4. YAYIN < / version >
< / ebeveyn >
< bağımlılık yönetimi >
< bağımlılıklar >
< bağımlılık >
< Grup kimliği > org.springframework.cloud < /Grup kimliği >
< artifactId > bahar-bulutu bağımlılıkları < / artifactId >
< versiyon > Finchley. < / version >
< tip > pom < / tür >
< dürbün > ithalat < /dürbün >
< /bağımlılık >
< / bağımlılıklar >
< / dependencyManagement >
< özellikleri >
< project.build.sourceEncoding > UTF-8 < /project.build.sourceEncoding >
< maven.compiler.source > 1.8 < /maven.compiler.source >
< maven.compiler.target > 1.8 < /maven.compiler.target >
< /özellikleri >
< bağımlılıklar >
< bağımlılık >
< Grup kimliği > org.springframework.boot < /Grup kimliği >
< artifactId > Spring-boot-starter-data-redis < / artifactId >
< /bağımlılık >
< bağımlılık >
< Grup kimliği > org.apache.commons < /Grup kimliği >
< artifactId > ortak havuz2 < / artifactId >
< /bağımlılık >
< bağımlılık >
< Grup kimliği > org.springframework.boot < /Grup kimliği >
< artifactId > Spring-boot-starter-web < / artifactId >
< /bağımlılık >
< bağımlılık >
< Grup kimliği > org.springframework.boot < /Grup kimliği >
< artifactId > Spring-boot-starter-cache < / artifactId >
< /bağımlılık >
< bağımlılık >
< Grup kimliği > com.zaxxer < /Grup kimliği >
< artifactId > HikariCP < / artifactId >
< /bağımlılık >
< bağımlılık >
< Grup kimliği > mysql < /Grup kimliği >
< artifactId > mysql-bağlayıcı-java < / artifactId >
< versiyon > 6.0.3 < / version >
< /bağımlılık >
< bağımlılık >
< Grup kimliği > org.mybatis < /Grup kimliği >
< artifactId > mybatis-bahar < / artifactId >
< versiyon > 1.3.2 < / version >
< /bağımlılık >
< bağımlılık >
< Grup kimliği > org.mybatis.spring.boot < /Grup kimliği >
< artifactId > mybatis-spring-boot-starter < / artifactId >
< versiyon > 1.3.2 < / version >
< /bağımlılık >
< bağımlılık >
< Grup kimliği > org.springframework.boot < /Grup kimliği >
< artifactId > yay önyükleme başlangıç testi < / artifactId >
< dürbün > Ölçek < /dürbün >
< /bağımlılık >
< / bağımlılıklar >
< / proje >
2. Yeni bir springboot başlangıç sınıfı RedisCacheApplication.java oluşturun
paket sc.redis.cache;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
ithalat
org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
/ **
* Daha fazla kaynak için genel hesabı takip edin: java cenneti
*
* @author Yöneticisi
*
* /
@SpringBootApplication
@EnableCaching // Önbelleğe almayı etkinleştir
@MapperScan (basePackages = "sc.redis.cache.dao")
public class RedisCacheApplication {
public static void main (String args) {
SpringApplication.run (RedisCacheApplication.class, args);
}
}
Açıklama: @MapperScan (basePackages = "sc.redis.cache.dao") Bu ek açıklamanın temel Paketleri, DAO'nun bulunduğu paketin son kaydı olmalıdır.
@MapperScan (basePackages = "sc.redis.cache") şöyle yazarsanız, testte bir hata bildirilir:
3. Yeni bir yapılandırma dosyası application.yml oluşturun
sunucu:
bağlantı noktası: 9003
bahar:
uygulama:
ad: sc-redis-cache
veri kaynağı:
driverClassName: com.mysql.jdbc.Driver
url: jdbc: mysql: // localhost: 3306 / sc? serverTimezone = UTCuseUnicode = truecharacterEncoding = UTF-8
kullanıcı adı: kök
şifre: root
tür: com.zaxxer.hikari.HikariDataSource
hikari:
minimum boşta: 5
maksimum havuz boyutu: 15
otomatik işleme: doğru
boşta kalma zaman aşımı: 30000
havuz-adı: DatebookHikariCP
maksimum ömür: 1800000
bağlantı zaman aşımı: 30000
bağlantı testi sorgusu: SEÇ 1
önbellek:
tür: REDIS
redis:
timeToLive: 200000 #Cache zaman aşımı süresi ms
cache-null-values: false # Boş değerleri önbelleğe alıp almayacağı
redis:
ana bilgisayar: 127.0.0.1
parola:
bağlantı noktası: 6379
zaman aşımı: 10000 # Bağlantı zaman aşımı süresi (milisaniye)
veritabanı: 0 # Redis varsayılan olarak 16 parçaya sahiptir, kullanılan belirli parçalar burada yapılandırılır, varsayılan değer 0'dır
marul:
havuz:
max-active: 8 # Bağlantı havuzundaki maksimum bağlantı sayısı (sınır olmadığını belirtmek için negatif bir değer kullanın) varsayılan olarak 8
max-wait: -1 # Bağlantı havuzunun maksimum engelleme bekleme süresi (sınır olmadığını belirtmek için negatif bir değer kullanın) varsayılan -1
max-idle: 8 # Bağlantı havuzundaki maksimum boşta bağlantı varsayılan olarak 8'dir
min-idle: 0 # Bağlantı havuzundaki minimum boşta bağlantı varsayılan olarak 0'dır
Kerestecilik:
seviye:
sc.redis.cache.dao: hata ayıklama
Açıklamalar: Yapılandırma dosyası, veritabanına bağlanmak için yapılandırma bilgilerini ve redis'e bağlanmak için yapılandırma bilgilerini içerir ve sql ifadelerini yazdırmak için günlük düzeyi de yapılandırılır
4. Yeni bir özel reids serileştirme yöntemi oluşturun RedisCacheSerializeConfiguration.java sınıfı
paket sc.redis.cache.config;
içe aktarma java.time.Duration;
import org.springframework.context.annotation.Bean;
org.springframework.context.annotation.Configuration dosyasını içe aktarın;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Yapılandırma
publicclass RedisCacheSerializeConfiguration {
/// **
// * ikisinden birini seç
// * Redis verilerinin varsayılan sona erme zamanını ayarlayın, @cacheable serileştirme yöntemini ayarlayın
// *
// * @dönüş
// * /
//@Fasulye
// genel RedisCacheConfiguration redisCacheConfiguration () {
// RedisCacheConfigurationconfiguration = RedisCacheConfiguration.defaultCacheConfig ();
// configuration = configuration.serializeValuesWith (RedisSerializationContext.SerializationPair.fromSerializer (valueSerializer ()))
// .entryTtl (Süre.Günler (30));
//configuration.serializeKeysWith (RedisSerializationContext.SerializationPair.fromSerializer (keySerializer ()));
// konfigürasyonu döndür;
//}
/ **
* ikisinden birini seçin
* Redis verilerinin varsayılan sona erme süresini ayarlayın, @cacheable serileştirme yöntemini ayarlayın
*
* @param connectionFactory
* @dönüş
* /
@Fasulye
public RedisCacheManager cacheManager (RedisConnectionFactory connectionFactory) {
RedisCacheConfigurationconfig = RedisCacheConfiguration.defaultCacheConfig (). EntryTtl (Duration.ofDays (30))
.serializeKeysWith (RedisSerializationContext.SerializationPair.fromSerializer (keySerializer ()))
.serializeValuesWith (RedisSerializationContext.SerializationPair.fromSerializer (valueSerializer ()))
.disableCachingNullValues ();
RedisCacheManager redisCacheManager = RedisCacheManager.builder (connectionFactory) .cacheDefaults (config)
.transactionAware (). build ();
System.out.println ("Özel RedisCacheManager yüklendi");
returnredisCacheManager;
}
özel RedisSerializer < Dize > keySerializer () {
returnnewStringRedisSerializer ();
}
özel RedisSerializer < Nesne > valueSerializer () {
returnnewGenericJackson2JsonRedisSerializer ();
}
}
5. Lütfen başlangıç ile ilgili sınıflar için kaynak koduna bakın, dizin yapısı aşağıdaki gibidir
6, birim test sınıfı yaz
paket sc.redis.cache;
org.junit.Test'i içe aktar;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
sc.redis.cache.model.User'ı içe aktar;
sc.redis.cache.service.UserService'i içe aktar;
@RunWith (SpringRunner.class)
@Hayalhanemersin
publicclass TestRedis {
privatestaticfinal Logger logger = LoggerFactory.getLogger (TestRedis.class);
@Autowired
privateUserService userService;
@Ölçek
publicvoid ekle () {
Kullanıcı u = yeni Kullanıcı ();
u.setId (4L);
u.setUserName ("huangjinjin");
u.setPosition ("cto");
u.setAge (24);
userService.addUser (u);
}
@Ölçek
publicvoid get () {
Kullanıcı u = userService.getUser (4L);
logger.debug ("userName =" + u.getUserName ());
}
}
7. Birim testi gerçekleştirin
Veritabanına bir veri parçası eklemek için add yöntemini çalıştırın:
Günlük:
Get yöntemini ilk kez çalıştırın:
Günlük:
Redis'i görüntülemek için redis-cli kullanın, veriler önbelleğe eklenmiştir
Get yöntemini ikinci kez çalıştırın:
Günlük:
Verilerin redis'ten elde edildiğini ve verileri sorgulamak için veri tabanına gitmediğini belirten herhangi bir sql ifadesinin basılmadığı tespit edildi.