Redis缓存--购物车,首页

购物车添加物品

@Override
    public boolean addBook(TShopcar tShopcar) {
        int num = tShopcar.getNum();
        //在查询Mysql之前先从redis中去查,redis中查询出的结果为空再到mysql去查,然后将mysql中查询的结果缓存到redis中
        String rbook=redisDao.hget("car"+tShopcar.getUid(),tShopcar.getBid().toString());
        if (rbook==null||rbook.equals("nil")){//如果redis中不存在该商品那么在mysql中去查,查完之后将结果添加到redis中
            TShopcar bookInCar=tShopcarMapper.selectSelective(tShopcar);
            if (bookInCar!=null){
                //说明购物车中已经存在该类商品,此时只需要更新这个商品的数量
                tShopcar.setNum(num+bookInCar.getNum());
                tShopcarMapper.updateNum(tShopcar);
                bookInCar.setNum(num+bookInCar.getNum());
                redisDao.hset("car"+tShopcar.getUid(),tShopcar.getBid().toString(), JSON.toJSONString(bookInCar));
            }
            else{//购物车中不存在该商品,直接添加
                tShopcar.setNum(num);
                List<TShopcar> shopList=tShopcarMapper.selectCarByUid(tShopcar.getUid());
                int count=shopList.size();
                if (count>= Constants.CAR_MAX_SIZE){//购物车中的商品数量已达上限
                    return false;
                }
                tShopcarMapper.insert(tShopcar);
            }
        }
        else {//将从redis中查出来的结果更新到mysql中
            //将rbook转成TShopCar对象
            TShopcar bookInCar=JSON.parseObject(rbook,TShopcar.class);
            tShopcar.setNum(num+bookInCar.getNum());
            tShopcarMapper.updateNum(tShopcar);
            bookInCar.setNum(num+bookInCar.getNum());
            redisDao.hset("car"+tShopcar.getUid(),tShopcar.getBid().toString(), JSON.toJSONString(bookInCar));
        }
        return true;

    }

首页缓存分类信息,因为分类基本不变

@Override
	public List<TType> selectAll() {
		String typeListStr=redisDao.get("typeList");
		System.out.println("---------typeList------"+typeListStr);
		if (typeListStr==null||typeListStr.equals("")){//查询数据库
			List<TType> typeList=typeMapper.selectAll();
			System.out.println(JSONArray.toJSONString(typeList));
			redisDao.set("typeList",JSONArray.toJSONString(typeList));
			return typeList;
		}
		else {
		List<TType> typeList=JSONObject.parseArray(typeListStr,TType.class);
		return  typeList;
		}
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
回答: Redis缓存面试题可以涉及到Redis的使用场景和常见问题。其中一个常见的面试题是关于Redis的会话缓存(session cache)。Redis的会话缓存可以通过持久化提供更好的存储一致性,相比其他存储(如Memcached)具有优势。如果用户的购物车信息丢失,大多数人会感到不高兴。幸运的是,Redis提供了持久化功能,可以确保数据不会丢失。甚至一些流行的商业平台如Magento也提供了Redis的插件来缓存会话。 另一个可能涉及到的面试题是关于缓存穿透的问题。缓存穿透指的是在Redis缓存和数据库中都找不到相关的数据,可能由于非法查询导致。解决缓存穿透的方法包括过滤非法查询、缓存空对象和采用布隆过滤器。过滤非法查询可以在后台服务中对非法查询进行过滤,不让其落到Redis服务上。缓存空对象可以在Redis中存储一个表示数据不存在的空对象,避免重复查询。而采用布隆过滤器可以用于判断一个元素是否在集合中,具有较高的空间效率和查询时间,但也有一定的误识别率和删除困难。 以上是关于Redis缓存的一些面试题的回答,希望对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [面试 Redis 没底?这 40 道面试题让你不再慌(附答案)](https://blog.csdn.net/xmt1139057136/article/details/115423283)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [66道史上最全Redis面试题,面试官能问的都被我找到了(附答案)](https://blog.csdn.net/m0_60478027/article/details/119215355)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [10题经典Redis面试题](https://blog.csdn.net/m0_52256357/article/details/125709819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值