Add evictor based loadbalancer caching (#644)
* Add Evictor dependency. Implement EvictorCache. * Add EvictorBasedLoadBalancerCacheManager. Add evictor to starter. * Set caffeine InitialCapacity from properties. * Add tests. Add javadocs. Fix creating multiple cache instances. * Reformat. Change property name. Add documentation. * Add more tests. * Move evictor version to parent. Add more tests. * Ignore .flattened-pom.xml. * Encapsulate Evictor and switch to non-evictor specific class naming. * Adjust the docs. * Fix after code review.
This commit is contained in:
committed by
GitHub
parent
05d936803f
commit
da0e06eb7a
@@ -803,19 +803,32 @@ in the following sections:
|
||||
|
||||
=== Spring Cloud LoadBalancer Caching
|
||||
|
||||
Apart from the basic `ServiceInstanceListSupplier` implementation that retrieves instances
|
||||
via `DiscoveryClient` each time it has to choose an instance, we provide a https://github.com/ben-manes/caffeine[Caffeine-backed]
|
||||
implementation.
|
||||
To make use of it, you need to have `com.github.ben-manes.caffeine:caffeine` in the classpath.
|
||||
The default setup includes `expireAfterWrite` set to 30 seconds and records set to soft references.
|
||||
Apart from the basic `ServiceInstanceListSupplier` implementation that retrieves instances via `DiscoveryClient` each time it has to choose an instance, we provide two caching implementations.
|
||||
|
||||
You can set your own `TTL` value (the time after write after which entries should be expired), expressed as `Duration`, by passing a `String` compliant with the https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-conversion-duration[Spring Boot `String` to `Duration` converter syntax].
|
||||
as the value of `spring.cloud.loadbalancer.cache.ttl` property.
|
||||
==== https://github.com/ben-manes/caffeine[Caffeine]-backed LoadBalancer Cache Implementation
|
||||
If you have `com.github.ben-manes.caffeine:caffeine` in the classpath, Caffeine-based implementation will be used.
|
||||
See the <<loadbalancer-cache-configuration, LoadBalancerCacheConfiguration>> section for information on how to configure it.
|
||||
|
||||
You can also override the default Caffeine Cache setup for the LoadBalancer by passing your own https://static.javadoc.io/com.github.ben-manes.caffeine/caffeine/2.2.2/com/github/benmanes/caffeine/cache/CaffeineSpec.html[Caffeine Specification]
|
||||
If you are using Caffeine, you can also override the default Caffeine Cache setup for the LoadBalancer by passing your own https://static.javadoc.io/com.github.ben-manes.caffeine/caffeine/2.2.2/com/github/benmanes/caffeine/cache/CaffeineSpec.html[Caffeine Specification]
|
||||
in the `spring.cloud.loadbalancer.cache.caffeine.spec` property.
|
||||
|
||||
WARN: Passing your own Caffeine specification will override any other LoadBalancerCache settings, including `TTL`.
|
||||
WARN: Passing your own Caffeine specification will override any other LoadBalancerCache settings, including <<loadbalancer-cache-configuration, General LoadBalancer Cache Configuration>> fields, such as `ttl` and `capacity`.
|
||||
|
||||
==== Default LoadBalancer Cache Implementation
|
||||
|
||||
If you do not have Caffeine in the classpath, the `DefaultLoadBalancerCache`, which comes automatically with `spring-cloud-starter-loadbalancer`, will be used.
|
||||
See the <<loadbalancer-cache-configuration, LoadBalancerCacheConfiguration>> section for information on how to configure it.
|
||||
|
||||
TIP: To use Caffeine instead of the default cache, add the `com.github.ben-manes.caffeine:caffeine` dependency to classpath.
|
||||
|
||||
[[loadbalancer-cache-configuration]]
|
||||
==== LoadBalancer Cache Configuration
|
||||
|
||||
You can set your own `ttl` value (the time after write after which entries should be expired), expressed as `Duration`, by passing a `String` compliant with the https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-conversion-duration[Spring Boot `String` to `Duration` converter syntax].
|
||||
as the value of the `spring.cloud.loadbalancer.cache.ttl` property.
|
||||
You can also set your own LoadBalancer cache initial capacity by setting the value of the `spring.cloud.loadbalancer.cache.capacity` property.
|
||||
|
||||
The default setup includes `ttl` set to 30 seconds and the default `initialCapacity` is `256`.
|
||||
|
||||
You can also altogether disable loadBalancer caching by setting the value of `spring.cloud.loadbalancer.cache.enabled`
|
||||
to `false`.
|
||||
@@ -831,7 +844,8 @@ In order to use it, just add `org.springframework.cloud:spring-cloud-starter-loa
|
||||
Cloud dependencies in your build file.
|
||||
|
||||
NOTE: Spring Cloud LoadBalancer starter includes
|
||||
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-caching.html[Spring Boot Caching].
|
||||
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-caching.html[Spring Boot Caching]
|
||||
and https://github.com/stoyanr[Evictor].
|
||||
|
||||
WARNING: If you have both Ribbon and Spring Cloud LoadBalancer int the classpath, in order to maintain
|
||||
backward compatibility, Ribbon-based implementations will be used by default. In order
|
||||
|
||||
Reference in New Issue
Block a user