skip to Main Content

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

3

Answers


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

    Login or Signup to reply.
  2. I want to store … as Redis Hash, but by default it storing it as simple key value pair. Just wondering is it possible to acheive same via @Cacheable annotaion way.

    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

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search