淘淘商城Redis中添加购物车信息

一、分析

设定Redis中购物车信息的key值为: REDIS_CART_KEY + “:” + name + “:base”
其中name为用户名,要想获取用户名信息,需要跨域请求taotao-sso中信息,获取用户信息,

二、实现

  1. 首先引入jedis,直接去拷贝taotao-rest中拷贝,如图所示
    淘淘商城Redis中添加购物车信息_第1张图片
    2、修改applicationContext-jedis.xml中信息,改为当前路径
    淘淘商城Redis中添加购物车信息_第2张图片
    3、因为需要跨域请求taotao-sso中信息,所以在配置文件中添加如下信息
    淘淘商城Redis中添加购物车信息_第3张图片
#登录系统的URL
SSO_BASE_URL=http://localhost:8084
#根据用户信息取url
SSO_USER_TOKEN=/user/token/
#购物车key
REDIS_CART_KEY=REDIS_CART_KEY

4、修改CartServiceImpl中的代码,首先注入jedis与配置文件信息

    @Autowired
    private JedisClient jedisClient;
    @Value("${SSO_BASE_URL}")
    private String SSO_BASE_URL; // localhost:8084
    @Value("${SSO_USER_TOKEN}")
    private String SSO_USER_TOKEN; // /user/token/
    @Value("${REDIS_CART_KEY}")
    private String REDIS_CART_KEY; // redis中购物车key

淘淘商城Redis中添加购物车信息_第4张图片
5、修改获取购物车列表信息getCartItemList代码

    @Override
    public List getCartItemList(HttpServletRequest request, HttpServletResponse response) {

        List itemList = null;
        itemList = getCartListByRedis(request);
        if (itemList.size() > 0) {
            return itemList;
        }
        // -----------------------------------------------------------------------------

        // itemList = getCartItemList(request); //从cookie中获取购物车列表
        return itemList;
    }

淘淘商城Redis中添加购物车信息_第5张图片
6、添加Redis中获取信息方法getCartListByRedis()

/**
     * 从Redis中获取购物车列表
     * 
     * @param request
     * @return
     */
    private List getCartListByRedis(HttpServletRequest request) {
        // redis查询-------------------------------------------------------------------------
        /**
         * 跨域请求获取用户信息
         */
        String token = CookieUtils.getCookieValue(request, "TT_TOKEN");
       //根据token的值取用户的信息
        String json1 = HttpClientUtil.doGet(SSO_BASE_URL + SSO_USER_TOKEN + token);
        // 把json转换成TaotaoREsult
        TaotaoResult result = TaotaoResult.formatToPojo(json1, TbUser.class);
        if (result.getStatus() == 200) {
            TbUser user = (TbUser) result.getData();
            String name = user.getUsername();

            // 从缓存中取商品信息,商品id对应的信息
            String json = jedisClient.get(REDIS_CART_KEY + ":" + name + ":base");
            // 判断是否有值
            if (json == null) {
                return new ArrayList<>();
            } else {
                List list = JsonUtils.jsonToList(json, CartItem.class);
                return list;
            }

        }
        return new ArrayList<>();
    }

淘淘商城Redis中添加购物车信息_第6张图片
7、此时再读取购物车信息时,会去redis中读取,下面修改添加购物车信息时,写入redis,首先,先修改添加购物车时,从cookie中取购物车列表改为从redis中取,改为如图所示:
淘淘商城Redis中添加购物车信息_第7张图片
8、添加购物车信息写入redis,在addCartItem()方法下,先注释掉写入cookie代码,添加如下代码

/**
         * 向Redis中写入购物车
         */
        // ------------------------------------------------------------------------------------------
        String token = CookieUtils.getCookieValue(request, "TT_TOKEN");

        String json1 = HttpClientUtil.doGet(SSO_BASE_URL + SSO_USER_TOKEN + token);
        // 把json转换成TaotaoREsult
        TaotaoResult result = TaotaoResult.formatToPojo(json1, TbUser.class);
        if (result.getStatus() == 200) {
            TbUser user = (TbUser) result.getData();
            String name = user.getUsername();
            try {
                // 把商品信息写入缓存
                jedisClient.set(REDIS_CART_KEY + ":" + name + ":base", JsonUtils.objectToJson(itemList));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // -----------------------------------------------------------------------------------

淘淘商城Redis中添加购物车信息_第8张图片
9、删除购物车,直接修改购物车数量,同理,

三、测试

你可能感兴趣的:(开发)