Spring @Cacheable 缓存key中文解决方案

老吴2019-01-19 11:40后端615浏览


版权声明:本篇文章为原创文章,转载请注明出处。https://yao2san.com/article/1859

Spring @Cacheable 用于缓存很简便,可以从方法参数中取出值拼接key,比如,将要缓存不同分类文章的第一页数据,可以这么写:

@Cacheable(cacheNames = "BLOG", key = "'ARTICLES_BY_CATEGORY:'+#category", condition = "#currPage==1")
public ResponseData<Object> getArticlesByCategory(int currPage, int pageSize, String category) {}

这样并没有什么问题,但是在redis中看到的key就很有可能是乱码:

ARTICLES_BY_CATEGORY:\xe5\x90\x8e\xe7\xab\xaf

所以我们可以将key转化一下,在存进去。有两种解决方案。

1.自定义key生成策略;

2.使用如下方式:

@Cacheable(cacheNames = "BLOG", key = "'ARTICLES_BY_CATEGORY:'+T(String).valueOf(#category).hashCode()", condition = "#currPage==1")

这样存的就是category的hashcode:

ARTICLES_BY_CATEGORY:698529

一来减小了存储空间,二避免发生乱码导致缓存无效。

赞一个! (1)

文章评论(如需发表图片,请转至留言)