淘淘商城Redis中添加购物车信息
程序员文章站
2022-03-10 16:28:13
...
一、分析
设定Redis中购物车信息的key值为: REDIS_CART_KEY + “:” + name + “:base”
其中name为用户名,要想获取用户名信息,需要跨域请求taotao-sso中信息,获取用户信息,
二、实现
- 首先引入jedis,直接去拷贝taotao-rest中拷贝,如图所示
2、修改applicationContext-jedis.xml中信息,改为当前路径
3、因为需要跨域请求taotao-sso中信息,所以在配置文件中添加如下信息
#登录系统的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
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;
}
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<>();
}
7、此时再读取购物车信息时,会去redis中读取,下面修改添加购物车信息时,写入redis,首先,先修改添加购物车时,从cookie中取购物车列表改为从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();
}
}
// -----------------------------------------------------------------------------------
9、删除购物车,直接修改购物车数量,同理,
三、测试
上一篇: 淘淘商城系列——添加购物车
下一篇: 嵌入式 Mplayer的移植、使用