Redis--黑马点评项目缓存雪崩问题
缓存雪崩问题:什么是缓存雪崩?如何解决该问题?
Redis--黑马点评项目缓存穿透问题
缓存穿透问题:什么是缓存穿透?如何解决该问题?
Redis--黑马点评项目缓存更新问题
缓存更新主要有以下三种缓存更新策略
内存淘汰:这种策略主要是利用Redis的内存淘汰机制,即当Redis中内存已满时,如果这时又新的数据到来,那么Redis就会按照一定策略淘汰掉一部分数据,从而让新数据进入。常见的淘汰策略有先进先出,最近未被使用(LUR),最少未被使用等。这种更新策略的优点是不需要维护,又Redis自己维护,缺点是几乎不能保证数据一致性,Redis中可能会同时存在旧数据和新数据。
超时剔除:这种策略需要我们在Redis存储数据时为其设置一个有效时间,时间一到数据自然剔除,当用户查询数据时,由于缓存中没有该数据,就会从数据库中查找,进而更新进缓存中。因此这种策略具有一定的数据一致性,但是一致性不高,因为如果数据在有效期内发生的变化,需要等到有效期后才会被存储进缓存中,在此期间取出的数据都是旧数据。
主动更新:当我们修改数据库中的数据时,需要手动的去更新缓存中的数据。具有较好的数据一致性,但是维护成本大。
需要根据不同业务场景来选择不同的更新策略,低一致性业务可以考虑内存淘汰,因为不需要维护;高一致性业务考虑主动更新。
主要有以下三种主动更新方案
Cache As ...
Redis--黑马点评项目使用缓存进行商户查询
使用缓存进行商户查询问题:为什么要使用缓存?常见的缓存有哪些?
使用缓存能够减少向数据库的查询次数,从而提高性能,缓解数据库压力。常见的缓存技术有连接池、线程池、常量池等。
以下是查询商户列表使用缓存前后消耗的时间,可以发现,使用缓存后,查询时间从1.52秒提示到了158毫秒,性能得到了极大的提升。
Redis--黑马点评项目集群session共享问题
集群session共享问题及解决方案问题:之前的设计方案是什么?有什么问题?解决方案是什么?为什么使用这种解决方案(Redis)?
当前我们的系统结构作为单体项目是可以的,但是一旦用户量比较大,想要转化为集群项目,这种架构就不行了。主要原因是,当前系统中,我们是基于session来进行数据共享的,但session中的数据只能在同一个服务器中进行共享,如果我们想要扩展为集群项目,使用session就无法做到多个服务器之间数据的共享。因此,必须使用另一种工具作为数据共享。而Redis能够很好的胜任这一要求。
1. Redis本身是一个数据库,而数据库本身就是用于存储数据以便进行数据共享的;2. Redis的数据是存放在内存中的,读取速率快,性能好;3. Redis支持各种数据类型,能够很好的满足各种数据的存储。
验证码存储进Redis以什么作为Key,Value选择什么数据类型?
以手机号作为key,value选择String类型即可,为了减少内存消耗,一般会给验证码存储进Redis时设置一个有效期。
用户信息存储进Redis以什么作为Key,Key的选择需要满足什么条件(唯一 ...
Redis--黑马点评项目初始化
开发短信验证登录功能开发流程:
发送短信模块 当点击我的之后会弹出登录页面,要求输入手机号获取验证码,当输入手机号点击发送验证码后,通过抓包发现浏览器会发送如下报文
可以看到,浏览器会以post方式向服务器发送请求,并携带请求参数:phone=xxx。
1234567891011121314public Result sendCode(String phone, HttpSession session){ //校验手机号是否合法 boolean phoneInvalid = RegexUtils.isPhoneInvalid(phone); //如果不合法 if(phoneInvalid){ return Result.fail("手机号不合法,请重新输入"); } //如果合法,则生成验证码(一个六位数随机数),并保存在session中 String code = RandomUtil.random ...
hexo结合主题Matery构建绝美博客
之前那个主题既不美观也不好用,我就上网搜了搜hexo的主题,发现了matery这个主题。最吸引我的其实不是它绚丽的色彩,而是它可以搜索文章以及热点图的功能,于是我赶紧搜索了一下如何下载该主题。
首先点击以下链接访问位于github上的matery主题项目,根据readme文档操作,需要注意的是在复制
123---title: xxx---
类似以上形式的内容时,在Typora中如果出现了以下情形,需要将多余的”—“删除
我当时就是没有删除,导致每次我执行hexo s时都会报以下错误
解决了以上问题后,我又有一个新问题:如何给我的文章分类,这个也很简单(然而当时却花了我不少时间)。按照readme文档的提示,我们在创建文章时,只要在顶部按照格式写上它的信息即可,比如
就表示这篇文章名称为:hexo结合主题Matery构建绝美博客
发表日期为:2024-03-05
作者为:dch
位于hexo这个类别下
标签是hexo和matery
最后附上搭建好的图片
Mybatis学习--8.手写简易版Mybatis框架
手写Mybatis框架第一步创建maven项目,引入相关依赖,打包方式改为jar
12345678910111213<packaging>jar</packaging> <dependencies> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> <version>1.2.0</version& ...
Mybatis学习--20.Mybatis注解式开发
MyBatis的注解式开发
到目前为止,我们都是在mapper.xml文件中编写sql语句,但其实mybatis提供了一种语法,可以不使用mapper.xml文件来编写sql语句,而是通过注解的方式来实现。
在实际开发中,我们采用混合式方法编写sql语句。对于一些简单sql语句,我们使用注解来实现,对于较复杂的sql语句我们还是使用mapper.xml文件进行编写
public interface CarMapper {
@Insert("insert into t_car values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})")
int insert(Car car);
@Delete("delete from t_car where id = #{id}")
int delete(Long ...
Mybatis学习--19.Mybatis中的分页插件
Mybatis使用PageHelper
PageHelper是他人开发出来方便mybatis进行分页操作的一个插件。
分页查询中的两个重要概念:
pageNum:页号,表示要查询第几页的信息
pageSize:每页可以显示的记录条数
用户发送请求时,需要将这两个信息一起发送。
在mysql中可以使用limit关键字来进行分页操作。比如select * from xxx limit 0,3;表示显示开头3条记录。limit后的第一个参数表示起始位置,第二个参数表示显示多少条记录。
通过分析我们可以得到以下关系式:
startIndex = (pageNum - 1) * pageSize;
因此根据用户从前端传来的pageNum和pageSize参数,可以使用limit关键字从数据库中获取相关数据
其实获取分页相关的数据并不难(直接通过limit关键字即可),但是想要获取分页相关的信息就没那么简单,比如是否还有下一页、上一页(通过limit很难做到),因此我们需要使用pageHelper插件
PageHelper插件
使用PageHelper插件进行分页 ...
Mybatis学习--18.Mybatis的逆向工程
Mybatis的逆向工程
使用mybatis的逆向工程(别人开发的工具),可以根据数据库表动态生成对应的pojo类,mapper接口以及mapper.xml文件。
使用逆向工程组件需要进行的配置
生成pojo类的类名,包名以及生成位置
生成mapper接口的接口名,包名以及生成位置
mapper.xml文件的文件名及生成位置
指定哪些表参与逆向工程
….
第一步:在pom文件中引入配置信息123456789101112131415161718192021222324252627282930313233343536373839404142<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ...
Mybatis学习--16.Mybatis的高级映射及延迟加载
Mybatis的高级映射及延迟加载高级映射
之前我们使用mybatis时,都是单表映射——一张数据库表对应一个java类。但在实际应用中,往往有多张表,且这些表之间是存在某种关系的比如:一对一、一对多、多对一等,针对以上情况,mybatis中提供了高级映射机制,来解决数据库表与java对象之间的映射关系。
以下以班级表和学生表为例
有两种解决方案:
将表的关系看作是多对一,即多个学生对应一个班级。以多的一方(Student)作为主表,Student对象作为主对象,Clazz对象作为副对象。通过Student对象可以找到对应的Clazz对象,因此在Student中添加一个Clazz属性。
mybatis中实现多对一映射的方法
一条sql语句,级联属性的方法
<resultMap id="studentResultMap" type="student">
<id property="id" column="id"></id>
...
