欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > redis实际开发应用简单实现

redis实际开发应用简单实现

2025/2/6 18:04:27 来源:https://blog.csdn.net/pedestrian_h/article/details/145408575  浏览:    关键词:redis实际开发应用简单实现

短信登录

首先来看看登录与注册常规实现流程如下:

其中,很多网站都有手机号验证码登录功能

如百度

实现之前咱可以来验证码有啥特点:一定时间内过期、验证码随机、与手机号会唯一匹配

所以可以使用redis的string来实现更容易,key设置成手机号,value设置成验证码,过期时间设置成3分钟

实现如下

   //引入redis工具类@Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result sendCode(String phone) {//1,看手机号格式是否正确这里可以自己实现下校验手机号格式boolean is_valid = sPhoneInvalid(phone);if (!is_valid) {return Result.fail("手机号格式错误");}//2,看手机号是否存在数据库QueryWrapper<User> queryWrapper = new QueryWrapper<>();User user = getOne(queryWrapper.eq("phone", phone));if (user == null) {return Result.fail("用户未注册过,请注册");//这里需前端跳转到注册网页}//3,生成验证码String code = RandomUtil.randomNumbers(6);log.info("请求验证码"+code);//4,存储进入redis 设置常量 key=登录业务前缀+邮箱 过期时间3分钟stringRedisTemplate.opsForValue().set(phone,code,3L, TimeUnit.MINUTES );//5,返回验证码HashMap<String,String> codeValue = new HashMap<>();codeValue.put("code", code);return Result.ok(codeValue);}

请求

看下redis是否存入缓存了

可以看到ttl即过期时间

可以在进行等待会刷新下redis

看到已显示键不存在

缓存

缓存就是数据交换的缓冲区,是存贮数据的临时地方,一般读写性能较高。

缓存一般作为数据层的中间层,在查询数据之前,先查询缓存,缓存有,直接返回,缓存没有,再查询db

这里参考黑马点评的例子来实现查询商品信息加入缓存功能

功能:给店铺类型查询业务添加缓存

ShopController 

@RestController
@RequestMapping("/shop")
public class ShopController {@Resourcepublic IShopService shopService;/*** 根据id查询商铺信息* @param id 商铺id* @return 商铺详情数据*/@GetMapping("/{id}")public Result queryShopById(@PathVariable("id") Long id) {return shopService.queryById(id);}}

ShopServiceImpl(这里采用string结构来实现,当然其它的数据结构也可以)

@Service
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {@ResourceStringRedisTemplate stringRedisTemplate;@Overridepublic Result queryById(Long id) {String cache_key = CACHE_SHOP_KEY+id;//查询redis是否存在商铺信息String shop_json = stringRedisTemplate.opsForValue().get(cache_key);//查询到了数据 直接返回  但是返回的数据为json格式的 需返回成对象形式if (!StrUtil.isBlank(shop_json)){Shop shop_result = JSONUtil.toBean(shop_json, Shop.class);return Result.ok(shop_result);}//redis找不到数据 到mysql再进行查询Shop shop_result = getById(id);//mysql中找不到则返回报错if (shop_result == null){return Result.fail("店铺不存在");}//存在则进缓存stringRedisTemplate.opsForValue().set(cache_key, JSONUtil.toJsonStr(shop_result),LOCK_SHOP_TTL, TimeUnit.MINUTES);//返回return Result.ok(shop_result);}
}

请求浏览器

来看看首次请求浏览器耗时

可以看到耗时5.25s

看到已存入redis

再次请求耗时 38ms,耗时得到了很大的优化

参考资料:黑马redis

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com