I have very common requirement and surprised that not able to find the same after browsing lot of pages over the internet.
Below is the code:
@Cacheable(value = "cache", key = "#request.userId", cacheManager = "defaultCacheManager")
public UserDto createOrFetch(CreateUserRequest request) {
I want to store, returned UserDto object as Redis Hash, but by default it storing it as simple key value pair.
-
I know this can achieved via HashOperations which we can get from Redis Template but it lacks to set ttl values to hashes.
-
Also RedisRepository can also be used by adding @RedisHash on class definition.
Just wondering is it possible to acheive same via @Cacheable annotaion way.
Note: I am using Jedis client with SpringBoot 2.1.4.RELEASE
3
Answers
If I understand you correctly, you could achieve this using:
However, how can you guarantee that this hash would be unique? That is a problem that you could encounter.
Reference: @Cacheable key on multiple method arguments
The annotation based abstraction (part of the Spring Framework) seems designed for the simple data typed key-value caches. For more complicated data operation, as of redis, its the job done by Spring Data Redis (in the context of Spring).
See also
I think what you are looking for is
@RedisHash
Reference: https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisHash.html