springboot的缓存技术以及完成手机验证案例
首先你要有些基础的知识,对于mysql,mybatis-plus,springboot,spring,有些基本认识;
springboot实现缓存技术的关键有
1.导入缓存需要的jar包
org.springframework.boot spring-boot-starter-cache
这里要说明一下我们使用的的是springboot默认使用的缓存技术simple
2.第二步我们要做得就是如何开启缓存
这时我们使用@EnableCaching在引导类上启用缓存即可;
@SpringBootApplication@EnableCaching//开启缓存public class Springboot2CacheApplication { public static void main(String[] args) { SpringApplication.run(Springboot2CacheApplication.class, args); }}
3.接下来就是最关键的部分了,就是如何使用缓存,将我们的数据放入缓存中
此时我们只要在查询数据的方法或者生成数据的方法上加上@Cacheable这个注解
@Servicepublic class bookServiceImpl extends ServiceImpl implements bookService{ @Autowired private bookDao bookDao;@Cacheable(value = "cacheSpace",key = "#id") @Override public book select(int id) { book book = bookDao.selectById(id); return book; }}
这里着重的讲解一下@Cacheable里面属性的含义value代表你要存放的缓存数据的位置,key就代表根据哪个字段进行存放。在上面的代码中我做了一个根据id查的查询;key同时也代表这以后我再查这个数据时在缓存中以什么查;
现在我们的缓存技术就已经完成了
下面我们可以通过一个下案列对缓存技术有一个深入的认识
手机验证码
关于如何生成手机验证码在这里我就不过多的讲解了,不会的小伙伴点击下面的链接去查看
https://blog.csdn.net/weixin_52652310/article/details/123930968?spm=1001.2014.3001.5501
1.首先我们对于要利用缓存技术生成验证码,要考虑的第一个问题是如何将生成的验证码放入缓存。
2.我们要考虑既然是验证码我们就要进行校验,那么此时我们就要考虑如何把我们存入在缓存的验证码取出。
针对以上的两个问题我们一 一解决;
其实在上面我们就讲解过如何将数据存入缓存,就是使用@Cacheable注解
@Cacheable(value = "codeSpace",key = "#tele") @Override public String get(String tele) { String generator = util.generator(tele); return generator; }
进行这个操作我们就可以成功的将生成的验证码放入缓存中了
对于如何取出数据进行校验,此时我们可以想到我们@Cacheable这个注解还有一个功能就是读取,想想我们上面的查询就可以知道key这个字段当时的作用是根据key绑定的值进行查,这不就是根据key取出数据吗
@Cacheable(value = "codeSpace",key = "#tele") public String GetCacheCode(String tele){ return null; }
上面这个代码就可以解决,相信很多人不理解为啥返回null,其实这里就是如果取出来的有值就返回这个值,如果取出的值为空,那么就返回null。
但这个要提示一下,
这个方法要在你检验的外部因为spring的原因这个方法无法在本类中启动,其实也很好解释,我们现在在使用spring的技术,而这个技术最大的特点就是你所创建的类都要在spring容器中去注册,由spring帮你完成bean的加载。
所以我在做的时候就把这个方法放入了一个工具类中,用的时候直接注入这个工具类,然后由工具类进行调用。
接下来就是检验了,只要用你传来的的那个验证码和缓存中取出来的验证码进行校验即可。利用equals方法
@Override public Boolean check(SMScode scode) { //进行校验 //得到前端传过来要进行校验的验证码 String code = scode.getCode(); //通过得到tele 取出缓存cache中的验证码进行匹配 //方法创建一个方法专门取缓存中的数据,这个方法要在Service的外部因为spring的原因这个方法无法在本类中启动 //所以我们将这个方法也放入工具类中 String cacheCode = util.GetCacheCode(scode.getTele()); //为了防止出现空指针异常的情况我们要把code放在前面 boolean equals = code.equals(cacheCode); return equals; }
好了这个两个问题我们都解决了,这个验证码校验我们也做完了。但此时我们这里还有一个小bug,就是当我们在生成验证码时我们的验证码都是动态生成的,而如果我们使用@Cacheable这个注解时我们会发现我们生成的验证码会不变这个因为这个注解不但存还读取,你想一想如果一个数据存进缓存又立马被读取,那么这个值还会变化吗?所以现在我们需要的仅仅是存,而不需要读取,而这个问题我们可以通过@Cacheput这个注解去解决,这个注解的作用就是只会进行存放而不会读取。只需修改一下注解即可
//@Cacheable(value = "codeSpace",key = "#tele")//这个注解我们不是适用了 我们仅仅需要放入,不需要读取,不然我们生成验证码就不会变 //此时我们使用@Cacheput只放不读 @CachePut(value = "codeSpace",key = "#tele") @Override public String get(String tele) { String generator = util.generator(tele); return generator; }
好了现在我们的这个案例已经彻底的完成了;
如果想要源码的小伙伴吗,可以私信我,免费白嫖的哦;