Spring boot Caching with Redis and Store value as Redis Hash

Viewed 907

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.

  1. I know this can achieved via HashOperations which we can get from Redis Template but it lacks to set ttl values to hashes.

  2. 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

2 Answers

If I understand you correctly, you could achieve this using:

@Cacheable(value="books", key="T(someType).hash(#isbn)") 
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

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

Related