赶紧来看看,这个redis这个坑你今后必定遇到!!!!!!!!!!!

122 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,

应该是第五天了,记不清了,今天给大家分享得这个玩意,在我做项目中整整浪费我一两个小时的时间,主要就是一个小问题,又开始怀疑自己的智商了,什么玩意,,哈哈哈哈,开个玩笑给大家说一说

  1. 什么问题呢,就是我们在平常做业务时,肯定会用到redis做缓存,这个问题涉及到的问题是--当我们从数据库查出来一组对象列表时,那么我们如何优雅的保存到redis中呢,这里用redis的list还是string随便你们了,反正我用的是String,上代码。
//    从数据库中查找
List<ShopType> shopList = query ().orderByAsc ("sort").list ();

比如这么一行代码,此处用的MP的查询所有数据,天真的我就这么去存取了,请看下面的代码.

stringRedisTemplate.opsForValue ().set (
      RedisConstants.CACHE_SHOP_TYPE_KEY, shopTypeJson,shopList.toString().CACHE_SHOP_TTL, TimeUnit.MINUTES

当时心里在想,就这,就这,当项目启动后,一个大耳巴子pia pia 的打到了脸上,在我们查询是肯定是先查缓存,结果我从数据库中取数据时给我返回了一堆字符串,这里就没图片给大家看了,可以联想实体类的toString()方法,再将这个字符串转为List对象时,md 怎么转都报错,相信写到这里,有些大佬应该知道是怎么回事了,就是在存的时候没有将list对象转为json的格式去存,取得时候你怎么能转为list对象呢~~~~~ 给大家看看解决后的代码... 这是存的代码

//  转换为json 写入缓存
String shopTypeJson = JSON.toJSONString (shopList);
stringRedisTemplate.opsForValue ().set (
      RedisConstants.CACHE_SHOP_TYPE_KEY, shopTypeJson,RedisConstants.CACHE_SHOP_TTL, TimeUnit.MINUTES

这是取得代码,这里用得hutool这个工具类,这里给大家推荐下这个工具类十分的好用。下面是取得时候得代码。很顺利的转为了list集合。

List<ShopType> shopTypesList = null;
String s = stringRedisTemplate.opsForValue ().get (RedisConstants.CACHE_SHOP_TYPE_KEY);

if (s != null){
    shopTypesList = JSONUtil.toList (s, ShopType.class);
}
   if (shopTypesList != null){
       return Result.ok (shopTypesList);
   }

好了,这里是个彩蛋,晚上给大家分享一些项目上所用得一些关键的代码和一些技术点,拜拜啦

喜欢的点个赞哈 , 您的鼓励是我最大的动力~~~~