opsForHash()

 JSONObject.toJSONString(areaGoodsVO)
 
 //hash数据结构  (key , map(hashKey,hashValue))==>  redisKey , hashKey, value ==> key  key value 
 
  redisTemplate.opsForHash().put(redisKey, hashKey, value);
 
 
 1.根据业务不同定义不同的redisKey ,此时的业务场景是 缓存区域下的商品  每个区域都有对应的商品有很多,要想把商品按区域划分存储,多个商品都归于某一个区域
 
 
  String redisKey = String.format(GoodsRedisKey.GOODS_AREA_HASH, areaGoodsVO.getAreaCode());
  redisKey--> 固定的+根据业务定义的 ydgf:goods:area_goods_hash:  101
  
  hashKey--> 6906785230165
  
  value --->  	{
				  "areaCode": "101",
				  "backCashRatio": 15,
				  "goodsCode": "11020102241",
				  "inputCode": "6906785230165",
				  "onLinePrice": 8.50,
				  "qpcMunit": "瓶",
				  "qpcNum": 1,
				  "qpcStr": "1*1",
				  "status": 1
				}
  
  
  
  
  
  
  redisTemplate.opsForHash().put(redisKey, hashKey, value);
  
  
                    固定的                +              根据业务定义key 这个key的定义是有业务联系的key ps
redisKey-->	  ydgf:goods:area_goods_hash:                    102


              hashKey-->    6948939601186
			  value-->      {
							  "areaCode": "102",
							  "backCashRatio": 15,
							  "goodsCode": "29000003441",
							  "inputCode": "6948939601186",
							  "onLinePrice": 8.00,
							  "qpcMunit": "个",
							  "qpcNum": 1,
							  "qpcStr": "1*1",
							  "status": 1
							}
	  
	  
			 hashKey-->     6928064006018
	  
			   value-->	    {
							  "areaCode": "102",
							  "backCashRatio": 15,
							  "goodsCode": "72010400012",
							  "inputCode": "6928064006018",
							  "onLinePrice": 15.00,
							  "qpcMunit": "个",
							  "qpcNum": 1,
							  "qpcStr": "1*1",
							  "status": 1
							}
	  
	  
			hashKey ---->  6972659820268
			
			value ----> {
							  "areaCode": "102",
							  "backCashRatio": 15,
							  "goodsCode": "62030200009",
							  "inputCode": "6972659820268",
							  "onLinePrice": 12.90,
							  "qpcMunit": "袋",
							  "qpcNum": 1,
							  "qpcStr": "1*1",
							  "status": 1
						}
	  
	  
	2.系统应用程序的背景图 不同的应用系统 和不同的业务模块 使用不同的图片
	
	构思: redisKey = 固定的 + 根据业务需要定义的
	
	     String redisKey = 固定的 +  应用系统类型(多个) + 业务模块类型(多种)
	  
	  
	    String imageKey = String.format(BackgroundImageRedisKey.BACK_GROUND_IMAGE, backgroundImageParam.getSystemType(), backgroundImageParam.getType());
        redisUtil.hPut(imageKey,backgroundImage.getCode(), backgroundImage.getOldUrl());
	     redisTemplate.opsForHash().put(key, hashKey, value);
	  
	  
	  构造需要的key:
	                 固定的 + 根据业务需要定义的
	
	   String imageKey = String.format(BackgroundImageRedisKey.BACK_GROUND_IMAGE, 不同的应用系统中定义不同的值, 业务模块类型(要查出所有模块的业务类型  集合 遍历 挨个取出来每个模块的背景图 每个模块有很多个背景图 ) );
	  
	  
	  获取不同模块的 业务类型
	      @ApiModelProperty(value = "类型:1首页,2分类,3购物车,4我的")
           private Integer type;
	  之前 存了吗? 存哪了? 访问数据库获取? 
	  
	  
	  存数据库了 不能每次都访问数据库 
	  那就存缓存
	  怎麽存
	  考虑
	  类型不能存重复  虽然存数据库了 查的时候也是需要去重的
	  那么 现在存缓存也不能重复
	  不能重复 考虑不重复的结构  set 去重
	  
	   key ===  构造需要的key 固定的值 + 根据业务定义(当前业务需要根据不同的应用系统 所以定义一个应用系统类型属性 作为 key的 组成部分 )
		 
	     redisTemplate.opsForSet().add(key, values);
		 
	  取值 
	  
	   Set<String>  setCollection =   redisTemplate.opsForSet().members(key);
		 
		 
	 
	     ps: 设置的value不能为空 ,否则会报错:
	     IllegalArgumentException: Values must not contain null elements!
	  
          redisTemplate.opsForHash().entries(key)
		 
		 
	  
3.用户的购物车
	  redisKey 组成: 固定值 + 根据业务需要定义的
	  
设计好key
	   String userCartKey = String.format(CartRedisKey.CART_LIST,loginUserVO.getUserId());
存 
存什么?
  存购物车
    存购物车的什么?
       购物车有什么?
         购物车有 用户购买的商品   有 用户购买的商品的数量 有用户购买的商品的信息 比如 商品条码等等	   
	  存哪些?
	    存重要的 核心的 有关联性的 信息
		  存 用户的商品条码 
		  存 用户购买的商品的数量
	怎麽存? 用缓存
    
	存用户的商品条码  用那个结构?
      购车车key定义好了,用户购买的商品在用户的购物车里面 多个商品存到一个购物车里面 用什么结构存?
	    
		string? key value是什么呢? 整个商品太大了 取商品的核心 比如条码  购买的商品多 条码是多个 多个用集合  用string不行 会覆盖掉value 排除
		
		list? 重复的怎麽办? 同一个商品条码要累加 排除
		
        set?    set可以去重 可以把 用户购买的商品条码都加进来      不重复的加进来 	  可以
		
		hash  hash是key hashKey value  用户购物车key已经定义好了   value是用户购买的商品的条码  hashKey 是什么呢?  不需要hashKey了 结构冗余 排除
		
		综上考虑还是用 set 结构
		
		set结构 去重 唯一  适合存一定数量的 业务具有唯一性的 数据 比如 用户购买的多个商品的条码  也就是用户加入购物车的商品的条码
		
		定义存储的key  思考存的是  用户的购物车商品的条码
		    固定值 + 用户的标识
		 String cartSelectedGoodsKey = String.format(CartRedisKey.CART_SELECTED_GOODS,loginUserVO.getUserId());
		 商品条码是用户一个一个的加入的
		 redisTemplate.opsForSet().add(cartSelectedGoodsKey, 用户加入购物车的商品的条码);
		 
		 不想要选错了 用户移除商品条码
		 redisTemplate.opsForSet().remove(key, values);
		 
		 
同时加入购物车的还有指定的商品条码对应的数量
	 
	 
用户购买的商品的数量 用那个结构?
购车车key定义好了, 每加一次商品 需要增加指定商品的数量 
商品条码 和 数量 是一对一的键值对 
多个商品条码就会产生多个键值对
存储这些键值对  就需要hash结构
  
	redisTemplate.opsForHash().put(定义好的用户购物车key, 用户购买的商品条码, 商品条码对应的数量);

    redisUtil.hPut(cartKey, inputCode, String.valueOf(count));
	  
	

获取用户购物车所有键值对的数量 多少个商品条码
redisTemplate.opsForHash().size(key)

判断用户购物车是否存在
redisTemplate.opsForHash().hasKey(key, field);


获取用户购物车的entry对象集合 key代表商品条码 value代表 商品数量  汇总收集value的值 

redisTemplate.opsForHash().entries(key)
    Map<Object, Object> objectObjectMap = redisUtil.hGetAll(cartKey);
Java Map.values()方法之如何获取Map集合中的所有键值对象


获取指定商品条码对应的数量
 redisTemplate.opsForHash().get(key, field);
 
Object result = redisUtil.hGet(cartKey, inputCode);
Integer.parseInt(result.toString());


判断购物商品是否是用户选中的勾选的状态
redisTemplate.opsForSet().isMember(key, value);


这里面才是用户购物车里所有的商品条码及其对应的商品数量
 redisTemplate.opsForHash().entries(key);
 
 
便利所有的商品条码 

4.获取购物车中的商品的区域商品
//根据商品条码 获取商品条码对应的商品数据

根据商品条码获取区域商品
根据传入的商品条码 和 当前登录用户所在的区域代码 从缓存中获取 当前区域下 有没有这个商品条码 有的话取出这个商品条码对应的商品对象

 String areaGoodsKey = String.format(GoodsRedisKey.GOODS_AREA_HASH,areaCode);


区域商品的存储  商品条码 归属于哪个区域下 选哪种结构存?

根据业务分析: 当前业务里 核心业务属性有  区域代码 商品条码  商品数据信息Obj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值