黑马点评笔记
登录功能
基于session的登录功能
但是使用session功能要保证使用同一台Tomcat进行处理,当使用Tomcat集群的时候,要保证几台Tomcat之间的session同步,这个情况需要付出比较大的代价,所以我们选择将手机–验证码、token–用户信息存入redis中,其中前者使用string类型,后者使用HashMap模式,将用户信息存成多个k-v方便检索
使用Redis完成登录验证的规则如下:

缓存使用
为了提高速度我们可以使用redis缓存来完成部分查询功能

具体代码实现如下:
@Override public Result queryById(Long id) { String key = CACHE_SHOP_KEY + id; //从redis中查询店铺缓存 String shopJson = stringRedisTemplate.opsForValue().get(key); //判断缓存是否存在 if(StrUtil.isBlank(shopJson)){ //如果缓存存在,则直接返回缓存数据 Shop shop = JSONUtil.toBean(shopJson,Shop.class); return Result.ok(shop); } //如果缓存不存在,则查询数据库 Shop shop = this.getById(id); if(shop == null){ return Result.fail("店铺不存在"); } //数据库里有,存入redis stringRedisTemplate.opsForValue().set(key,JSONUtil.toJsonStr(shop)); //返回店铺信息 return Result.ok(shop); }缓存更新策略
我们选择使用删除缓存策略——更新数据库是让缓存失效,等查询时再重新更新缓存,并将缓存和数据库操作放在同一个事务
接下来我们来讨论应该先删缓存还是先更新数据库:
明显右侧的线程一之间的间隔比较小,所以发生的情况比较少,我们采取先操作数据库,再删除缓存