我爱java系列---【redis中如何存取hash类型的值(key field value)】
@Service public class CartServiceImpl implements CartService { private static final String CART="Cart_"; @Autowired private RedisTemplate redisTemplate; @Autowired private SkuFeign skuFeign; @Autowired private SpuFeign spuFeign; /** * 添加购物车 * @param skuId * @param num */ @Override public void add(String skuId, Integer num,String username) { /** * 1)查询redis中的数据 * 2)如果redis中已经有了,则追加数量,重新计算金额 * 3)如果没有,将商品添加到缓存 */ OrderItem orderItem = (OrderItem) redisTemplate.boundHashOps(CART+username).get(skuId);//从redis中取值 if (orderItem != null){ //存在,刷新购物车 orderItem.setNum(orderItem.getNum()+num); orderItem.setMoney(orderItem.getNum()*orderItem.getPrice()); orderItem.setPayMoney(orderItem.getNum()*orderItem.getPrice()); }else{ //不存在,新增购物车 Result<Sku> skuResult = skuFeign.findById(skuId); Sku sku = skuResult.getData(); Spu spu = spuFeign.findByspuId(sku.getSpuId()); //将SKU转换成OrderItem orderItem = this.sku2OrderItem(sku,spu,num); } //存入redis redisTemplate.boundHashOps(CART+username).put(skuId,orderItem);//往redis中存值 } //sku转换为orderItem private OrderItem sku2OrderItem(Sku sku, Spu spu, Integer num) { OrderItem orderItem = new OrderItem(); orderItem.setSpuId(sku.getSpuId()); orderItem.setSkuId(sku.getId()); orderItem.setName(sku.getName()); orderItem.setPrice(sku.getPrice()); orderItem.setNum(num); orderItem.setMoney(num*orderItem.getPrice()); //单价*数量 orderItem.setPayMoney(num*orderItem.getPrice()); //实付金额 orderItem.setImage(sku.getImage()); orderItem.setWeight(sku.getWeight()*num); //重量=单个重量*数量 //分类ID设置 orderItem.setCategoryId1(spu.getCategory1Id()); orderItem.setCategoryId2(spu.getCategory2Id()); orderItem.setCategoryId3(spu.getCategory3Id()); return orderItem; } }
redisTemplate.boundHashOps(CART+username).put(skuId,orderItem);//往redis中存值
redisTemplate.boundHashOps(CART+username).get(skuId);//从redis中取值
这里注意boundHashOps这个方法在往redis中存值的时候,在hash类型中,一个key可以对应多个多个field,一个field对应一个value。将一个对象存储为hash类型的好处之一:较于每个字段都单独存储成string类型来说,更能节约内存。
愿你走出半生,归来仍是少年!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步