分布式三大问题:? 分布式锁、分布式事务、分布式文件
?
热销榜单的实现?
@RestController
@RequestMapping("api/v1/rank")
public class RankController {
@Autowired
private RedisTemplate redisTemplate;
private static final String DAILY_RANK_KEY = "video:rank:daily";
@RequestMapping("daily_rank")
public JsonDate videoDailyRank(){
// 此时数据还没有插入到list中,从单元测试中插入的
List<VideoDo> list = redisTemplate.opsForList().range(DAILY_RANK_KEY,0,-1);
return JsonDate.buildSuccess(list);
}
}
@Test
public void saveRank(){
String DAILY_RANK_KEY = "video:rank:daily";
VideoDo videoDo1 = new VideoDo(1, "课程1", "img", 1000);
VideoDo videoDo2 = new VideoDo(2, "课程2", "img", 1000);
VideoDo videoDo3 = new VideoDo(3, "课程3", "img", 1000);
redisTemplate.opsForList().leftPushAll(DAILY_RANK_KEY, videoDo1, videoDo2, videoDo3);
// 手动设置video为榜单中的第一个
redisTemplate.opsForList().set(RANK_KEY,1,video);
}
利用hash数据结构实现购物车
?一般Do是与数据库交互的一层,Vo是返回前段的一块
@RestController
@RequestMapping("api/v1/cart")
public class CartController {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private VideoDao videoDao;
@RequestMapping("add")
public JsonDate addCart(int videoId,int buyNum){
// 先获取购物从,判断是否有,有就增加,没有就创建
BoundHashOperations<String, Object, Object> mycartOps = getMycartOps();
Object o = mycartOps.get(videoId + "");
String res = "";
if(o!=null){
res = (String)o;
}
if(o == null){ // 购物车没有这个商品
CartItemVO cartItem = new CartItemVO(); //将商品加入到购物车中
VideoDo videoDo = videoDao.findDetailById(videoId);
cartItem.setBuyNum(buyNum);
cartItem.setPrice(videoDo.getPrice());
mycartOps.put(videoId, JsonUtil.objectToJson(cartItem));
}else{
// 增加商品购买数量
CartItemVO cartItemVO =JsonUtil.jsonToPojo(res,CartItemVO.class);
cartItemVO.setBuyNum(cartItemVO.getBuyNum()+buyNum);
mycartOps.put(videoId+"",JsonUtil.objectToJson(cartItemVO));
}
return JsonDate.buildSuccess();
}
/**
* 抽取购物车公共方法
* @return
*/
private BoundHashOperations<String,Object,Object> getMycartOps(){
String key = getCartKey();
return redisTemplate.boundHashOps(key);
}
private String getCartKey(){
// 用户id,一般是直接从拦截器中或区域
int userId = 88;
String cartKey = String.format("video:cart:%s",userId);
return cartKey;
}
}
|