redis使用

redis使用步骤

在common模块下的service-util中添加redis依赖
在这里插入图片描述

复制工具类
在这里插入图片描述

在需要使用到redis的模块加入配置文件 service-item 、service-product

在这里插入图片描述

redis中设计数据结构 key

Redis设计的好不好,完全看key, key模板:Object:userId:field
举个例子:
Key = User:2:password
Value = 123456(需md5加密)
Key为User:2:password,表示为user表中id为2的密码。对应的value密码为 123456。

在这里插入图片描述

string类型用法

 String skuKey =  RedisConst.SKUKEY_PREFIX+skuId+ RedisConst.SKUKEY_SUFFIX;;
        //查询缓存
        String skuCache = (String)redisTemplate.opsForValue().get(skuKey);
			 //setIfAbsent 如果键不存在则新增,存在则不改变已经有的值
            //3秒钟分布式锁过期
            Boolean lock = redisTemplate.opsForValue().setIfAbsent("sku:"+skuId+":stock", uuId, 3, TimeUnit.SECONDS);
                //数据库查询完成,放入缓存
                if(null != skuInfo){  //null 没有 equals 方法
                    redisTemplate.opsForValue().set(skuKey, JSON.toJSONString(skuInfo));
                }else {
                    //如果查询为空,防止空对象到redis中,防止缓存穿透,new一个SkuInfo给他放  十秒后过期
                    redisTemplate.opsForValue().set(skuKey, JSON.toJSONString(new SkuInfo()), 10, TimeUnit.SECONDS);
                }
                // 删除锁之前判断一下删除的是否是自己当前的锁
                String stockLock = redisTemplate.opsForValue().get("sku:"+skuId+":lock").toString();
                if (stockLock.equals(uuId)) {
                    redisTemplate.delete("sku:"+skuId+":stock");//操作完成,释放分布式锁
                }

hash类型用法

这里使用的是redis的hash结构:key:user:userId:cart,value:cartInfo

 //将购物车的信息添加进缓存   hash结构     key:user:userId: cart   value就是skuId跟商品详细信息
        redisTemplate.boundHashOps(RedisConst.USER_KEY_PREFIX + userId + RedisConst.USER_CART_KEY_SUFFIX).put(skuId + "", cartInfo);
 //删除临时用户数据时把缓存中临时数据的也删掉
        redisTemplate.delete(RedisConst.USER_KEY_PREFIX + userTempId + RedisConst.USER_CART_KEY_SUFFIX);

     // 将购物车信息同步到缓存
        HashMap<String, CartInfo> map = new HashMap<>();
        for (CartInfo cartInfo : cartInfos) {
            Long skuId = cartInfo.getSkuId();
            //把value放进map中  注意 放入的是登录成功的userId
            map.put(skuId+"",cartInfo);
        }
        //将购物车的信息添加进缓存   hash结构     key:user:userId: cart   value就是skuId跟商品详细信息
       redisTemplate.boundHashOps(RedisConst.USER_KEY_PREFIX + userId + RedisConst.USER_CART_KEY_SUFFIX).putAll(map);

list类型用法

leftPush进list,RightPop出list。

		//把数据放进队列   补偿队列
        redisTemplate.opsForList().leftPush(MqConst.MQ_KEY_PREFIX, JSON.toJSONString(gmallCorrelationData.getId()));  //key:mq:list value:id

 //获取补偿队列 mq:list中的数据 先进先出
        //String crrelationId = (String)redisTemplate.boundListOps(MqConst.MQ_KEY_PREFIX).rightPop();
        String crrelationId = (String)redisTemplate.boundListOps("mq:list").rightPop();
        
			 //  key:seckill:stock:skuId     value:skuId  从左边加入redis
             redisTemplate.boundListOps(RedisConst.SECKILL_STOCK_PREFIX+seckillGood.getSkuId()).leftPush(seckillGood.getSkuId()+"");

zset类型用法

ListApiServicelmpl

   //点击次数存入redis    将 hotScore 下的 skuId 增加1  hotScore是总分
        Double hotScore = redisTemplate.opsForZSet().incrementScore("hotScore", skuId.toString(), 1);
          if (hotScore % 10 == 0) {
            //点击次数满10次 存入es    先找到es中的元素、在获取这个元素、设置热点值、保存进es
            Optional<Goods> byId = elasticsearchRepository.findById(skuId);
            Goods goods = byId.get();
            goods.setHotScore(hotScore.longValue());
            elasticsearchRepository.save(goods);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值