欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-10 16:28:13
...

一、分析

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

二、实现

  1. 首先引入jedis,直接去拷贝taotao-rest中拷贝,如图所示
    淘淘商城Redis中添加购物车信息
    2、修改applicationContext-jedis.xml中信息,改为当前路径
    淘淘商城Redis中添加购物车信息
    3、因为需要跨域请求taotao-sso中信息,所以在配置文件中添加如下信息
    淘淘商城Redis中添加购物车信息
#登录系统的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中添加购物车信息
5、修改获取购物车列表信息getCartItemList代码

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

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

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

淘淘商城Redis中添加购物车信息
6、添加Redis中获取信息方法getCartListByRedis()

/**
     * 从Redis中获取购物车列表
     * 
     * @param request
     * @return
     */
    private List<CartItem> 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<CartItem> list = JsonUtils.jsonToList(json, CartItem.class);
                return list;
            }

        }
        return new ArrayList<>();
    }

淘淘商城Redis中添加购物车信息
7、此时再读取购物车信息时,会去redis中读取,下面修改添加购物车信息时,写入redis,首先,先修改添加购物车时,从cookie中取购物车列表改为从redis中取,改为如图所示:
淘淘商城Redis中添加购物车信息
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中添加购物车信息
9、删除购物车,直接修改购物车数量,同理,

三、测试