Sama seperti Ehcache, jika Redis wujud di bawah laluan kelas dan Redis telah dikonfigurasikan, RedisCacheManager akan digunakan sebagai penyedia cache secara lalai adalah seperti berikut:
Buat projek Spring Boot dan tambahkan spring-boot-starter-cache dan Redis dependencies
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
Cache berdiri sendiri Redis hanya memerlukan pembangun melakukan konfigurasi Redis dan konfigurasi cache dalam application.properties Kodnya adalah seperti berikut
# Konfigurasi cache
#. Konfigurasikan nama cache. Setiap kunci dalam Redis mempunyai Awalan, awalan lalai ialah "nama cache::"
spring.cache.cache-names=c1,c2
# Konfigurasikan tempoh sah cache, iaitu ialah, masa tamat tempoh utama dalam Redis
spring.cache.redis.time -to-live=1800s
# Redis configuration
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password =123456
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle =8
spring.redis.jedis.pool.max-wait=- 1ms
spring.redis.jedis.pool.min-idle=0
Dayakan caching dalam kelas kemasukan projek, seperti berikut
@SpringBootApplication @EnableCaching public class CacheApplication { public static void main(String[] args) { SpringApplication.run(CacheApplication.class, args); } }
Langkah 4 dan 5 adalah sama dengan aplikasi Ehcache 2.x analisis ringkas SpringBoot tentang mekanisme caching, jadi tiada penjelasan lanjut akan diberikan di sini
Buku
public class Book implements Serializable { private Integer id; private String name; private String author; @Override public String toString() { return "Book{" + "id=" + id + ", name='" + name + '\'' + ", author='" + author + '\'' + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } }
BookDao
@Repository @CacheConfig(cacheNames = "book_cache") public class BookDao { @Cacheable public Book getBookById(Integer id) { System.out.println("getBookById"); Book book = new Book(); book.setId(id); book.setName("三国演义"); book.setAuthor("罗贯中"); return book; } @CachePut(key = "#book.id") public Book updateBookById(Book book) { System.out.println("updateBookById"); book.setName("三国演义2"); return book; } @CacheEvict(key = "#id") public void deleteBookById(Integer id) { System.out.println("deleteBookById"); } }
@RunWith(SpringRunner.class) @SpringBootTest public class CacheApplicationTests { @Autowired BookDao bookDao; @Test public void contextLoads() { bookDao.deleteBookById(1); bookDao.getBookById(1); bookDao.getBookById(1); bookDao.deleteBookById(1); Book b3 = bookDao.getBookById(1); System.out.println("b3:"+b3); Book b = new Book(); b.setName("三国演义"); b.setAuthor("罗贯中"); b.setId(1); bookDao.updateBookById(b); Book b4 = bookDao.getBookById(1); System.out.println("b4:"+b4); } }
Laksanakan kaedah, konsol mencetak log seperti berikut :
deleteBookByIdgetBookByIddeleteBookById
Untuk mengelakkan kesan cache pada ujian ulang-alik, kami mula-mula melakukan operasi pemadaman ( Ini juga akan memadamkan cache). Kemudian pertanyaan dilaksanakan, mencetak secara normal, kemudian pertanyaan lain dilaksanakan tanpa mencetak (cache dibaca secara langsung), kemudian pemadaman dilaksanakan, kemudian pertanyaan dilaksanakan dan pencetakan adalah normal (operasi pemadaman juga memadamkan cache), dan kemudian operasi kemas kini telah dilaksanakan ( Cache dikemas kini pada masa yang sama), dan akhirnya pertanyaan dilakukan semula dan data yang dikemas kini dicetak.
getBookById
getBookById b3:Buku{id=1, name='Romance of the Three Kingdoms', author='Luo Guanzhong'}
updateBookById
b4:Book{id=1, name='Romance of the Three Kingdoms 2' , author='Luo Guanzhong'}
Atas ialah kandungan terperinci Cara menggunakan cache bersendirian Redis bagi mekanisme caching SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!