当前位置: 首页 > news >正文

如何缩小wordpress文字边距优化疫情政策

如何缩小wordpress文字边距,优化疫情政策,南网站建设,个人链接怎么制作文章目录 1、缓存2、用HashMap模拟自定义缓存3、SpringBoot提供缓存的使用4、手机验证码案例完善 1、缓存 缓存是一种介于数据永久存储介质与数据应用之间的数据临时存储介质使用缓存可以有效的减少低速数据读取过程的次数(例如磁盘IO),提高…

文章目录

  • 1、缓存
  • 2、用HashMap模拟自定义缓存
  • 3、SpringBoot提供缓存的使用
  • 4、手机验证码案例完善

1、缓存

  • 缓存是一种介于数据永久存储介质与数据应用之间的数据临时存储介质
  • 使用缓存可以有效的减少低速数据读取过程的次数(例如磁盘IO),提高系统性能
  • 缓存不仅可以用于提高永久性存储介质的数据读取效率,还可以提供临时的数据存储空间

在这里插入图片描述

注意最后这条,缓存的不一定就是从持久层数据库来的数据,也可以是程序运行的临时数据,理解别太狭义,如手机验证码,对应于下图的Cache1:

在这里插入图片描述

2、用HashMap模拟自定义缓存

传统的一个查询接口,每次都查需要去和数据库交互,数据库压力大且容易产生性能瓶颈:

在这里插入图片描述
在这里插入图片描述

在Service层引入一个Map类型的非局部变量,来模拟缓存:(这种使用一个Map来充当临时缓冲池的思想需要学习

private HashMap<Integer,Book> cache = new HashMap<>();@Override
public Book getBookById(Integer id){Book book = cache.get(id);if(book == null){book = bookDao.selectById(id);cache.put(id,book);}return book;
}

此时调用之前的接口,除了第一次需要查数据库,后面直到服务重启,变量被回收,都不用再去查数据库。同理,写个手机验证码的demo代码:

在这里插入图片描述

看下效果:

在这里插入图片描述
在这里插入图片描述

3、SpringBoot提供缓存的使用

首先导入缓存技术对应的starter:

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

配置配或者直接启动类上加@EnableCaching启动缓存

@SpringBootApplication@EnableCaching  //!!!!public class SpringbootApplication {    public static void main(String[] args) {SpringApplication.run(SpringbootApplication.class, args);    }
}

此时,上面用HashMap模拟缓存的Service码就可改为:

@Cacheable(value="cacheSpace",key="#id")public Book getById(Integer id) {    return bookDao.selectById(id);}

即先从cacheSpace这块缓存空间查看,有则返回,没有再查持久层。@Cacheable注解,即以属性里的key值为键,以方法的返回值为value,既存又取,有则取,无则查后存。 以上是背后使用的缓存技术是SpringBoot默认的Simple。SpringBoot提供的缓存技术除了提供默认的缓存方案外,还可以对其他缓存技术进行整合,统一接口,方便缓存技术的开发与管理:

  • Generic
  • JCache
  • Ehcache
  • Hazelcast
  • Infinispan
  • Couchbase
  • Redis
  • Caffeine
  • Simple(默认)
  • memcached

4、手机验证码案例完善

引入@Cacheable注解后,重写并完善下这个验证码的案例。先写个工具类来生成验证码,这个工具类写的不优雅,重点备份下补0串的这种思想吧:

public class CodeUtil {private static final String[] patch = {"000000","00000","0000","000","00","0",""};public static String generatorCode(String tel){int hash = tel.hashCode();int encryption = 20230927;  //加密常量码long result = hash ^ encryption;  //第一次加密,此时,我加密码写死,同一个电话号码的验证码会一直不变long nowTime = System.currentTimeMillis();result = result ^ nowTime;  //引入时间,二次加密long code = Math.abs(result % 1000000);  //取后六位String codeStr = code + "";  //也可能不够6位,比如000147,则上面的long code就是147return patch[codeStr.length()] + codeStr;  //加一个补0数组,根据字符串长度来取对应的补0串,最多补5个0,最少不补,这里为了适配数组下标从0开始,给array[0]给个值}
}

注意根据字符串长度来取数组中对应的补0串时,长度为6,则取array[6],但数组下标从0开始,会越界:

在这里插入图片描述

此时有两种思路处理,一种是上面的,给数组加个下标为0的值,此时str.length()就和数组下标对应上了,也可以直接让str.length()-1:

return patch[codeStr.length() -1 ] + codeStr;

Service层,生成验证码,并存缓存,不能用@Cacheable,它既存又取,这样验证码在缓存失效前都一样,可改为@CachePut只存不取

@Service
@Slf4j
public class MsgServiceImpl implements MsgService {@Resource@Lazy  //解决下循环以来的问题MsgService msgService;/*** 返回验证码* @param tel* @return*/@Override//@Cacheable(value = "telCode",key = "#tel")@CachePut(value = "telCode",key = "#tel")public String getCheckCode(String tel) {String checkCode = CodeUtil.generatorCode(tel);return checkCode;}/*** 校验验证码* @param tel* @param checkCode* @return*/@Overridepublic boolean verify(String tel, String checkCode) {return checkCode.equals(msgService.getCode(tel));}@Override@Cacheable(value = "telCode",key = "#tel")public String getCode(String tel){return null;}
}

关于校验方法里的取验证码,之前写需求用redis,直接redisTemplate.get了,但这里底层缓存技术是Simple,可单独写个方法,上面加@Caceable注解,然后校验方法里调用这个获取缓存值的方法即可实现(此时会有@Cacheable注解失效问题,注意出去绕一圈拿代理对象来调用)。还是利用了@Cacheable注解的特点,先查有无这个key,有就把value当作这个方法的返回值,没有再执行代码方法体。

@Cacheable(value = "telCode",key = "#tel")
public String getCode(String tel){return null;
}

Controller层随便写就行:

@RestController
@RequestMapping("/msg")
public class MsgController {@ResourceMsgService msgService;@GetMapping("{tel}")public String getCode(@PathVariable String tel){return msgService.getCheckCode(tel);}@PostMappingpublic Boolean verifyCode(@RequestParam String tel,String code){return msgService.verify(tel,code);}
}

重点关注:

  • 工具类中加密使用了一个补0数组的思想
  • @Cacheable既存又取,这样验证码在缓存失效前都一样,可改为@CachePut只存不取
  • @Cacheable注解因方法内部调用而失效的解决
  • 不用Redis,再取数据时,引入了一个方法,加@Cacheable注解并返回null,即查到这个key的值就返回,否则返回方法的返回值,即null
http://www.mmbaike.com/news/21966.html

相关文章:

  • 用vue做网站一般用什么组件库sem营销是什么意思
  • 想找公司做网站上海网络排名优化
  • 网站建设的步骤著名的个人网站
  • 在线ps手机版网页版抖音矩阵排名软件seo
  • 章丘做网站公司百度竞价开户公司
  • 为什么做旅游网站哈尔滨百度网站快速优化
  • 毕业设计做购物网站的要求常见的搜索引擎有哪些?
  • 跟有流量的网站做友情链接十大广告公司排名
  • 洛阳交友网站开发公司seo搜索引擎工具
  • 微信支付 网站备案淘宝怎么优化关键词步骤
  • 上海企业网站制作哪家专业外贸公司一般怎么找客户
  • 如何给网站做脚本今日头条seo
  • 网站要怎么做的网络营销是网上销售吗
  • 注册去美国做住家保姆的网站百度号码认证申诉平台
  • 网站建设选哪家网站seo需要用到哪些工具
  • 今天开始做女神免费网站百度搜索引擎的特点
  • 做网站开源免费网站的软件
  • 网站开发辛苦吗什么是论坛推广
  • WordPress交互式网站搜索引擎优化介绍
  • 做网站用什么工具好关键词查找
  • 设计网站软件开发网络推广员是干什么的
  • 做pc端网站价格如何免费做视频二维码永久
  • 有视频做的很好的网站吗seo外包公司优化
  • 网站建设公司好不好宁波seo网络推广优质团队
  • 网站注册页面html夸克搜索引擎入口
  • 哪个网站是做韩国化妆品正品网络营销推广的手段
  • .net 网站 数据库配置文件网络营销师证书有用吗
  • 厦门网站建设公司排行榜成都网站seo外包
  • zblog可以做视频网站吗计算机培训短期速成班
  • 网站建设哪些字体没有版权广告文案经典范例200字