SpringBoot个人博客集成Reids
本人为什么用Redis?
- 所谓学以致用,竟然有学Redis,那就不妨在真实项目上实战一下(虽然用的不深)
- redis强大,好用(前提要会用)
Redis是什么?
是完全开源免费的,用C语言编写的,是一个高性能的分布式内存数据库,基于内存运行,
并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一
Redis与其他key-value缓存产品有以下三个特点
-
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
-
Redis不仅仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash等数据库结构的
存储。
-
Redis支持数据的备份,即master-salve模式的数据备份
应用场景
- 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等。
- 应用于任务队列,如秒杀、抢购、购票排队等。
- 即时信息查询,如排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等。
- 时效性信息控制,如验证码控制、投票控制等。
- 分布式数据共享,如分布式集群架构中的 session 分离以及消息队列、分布式锁等。
本机实战演示
本人用redis存储文章的浏览量,页面,刷新一次浏览量+1,设置规定时间把redis数据更新到mysql中
application.yml配置文件配置Redis信息
spring:
##redis配置
redis:
##端口号
host: 127.0.0.1
port: 6379
##Redis连接密码默认未空
password:
jedis:
pool:
#连接池最大连接数(使用负值表示没有限制)
max-active: 8
#连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
#连接池中最大空闲连接
max-idle: 8
#连接池中最小空闲连接
min-idle: 0
#连接超时时间(毫秒)
timeout: 30000
编写Redis工具类(网上copy即可)根据自己需求在改一些东西就可以了
编写redis任务类(在规定的时间将redis的数据更新进mysql数据库中)
package com.wang.handler;
import com.wang.pojo.Blog;
import com.wang.service.blog.BlogService;
import com.wang.utils.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Set;
/**
* redis定时任务类
* 设置规定的时间把redis数据更新到mysql数据库中
*/
@Component
@Slf4j
public class ScheduledTasks {
@Autowired
private RedisUtil redisUtil;
@Autowired
private BlogService blogService;
//每天中午12点更新数据
@Scheduled(cron = "0 0 12 * * ?")
public void syncSeeCount(){
Blog blog=null;
log.info("===============开始同步博客文章访问量=================");
Set<String> keys = redisUtil.keys("blog*");
for (String key : keys) {
blog=new Blog().setId(Integer.parseInt(key.substring(4))).setSeeCount((Integer)(redisUtil.get(key)));
blogService.editPBlog(blog);
}
log.info("===============本次同步博客文章访问量成功=================");
log.info("===============结束 博客文章访问量=================");
}
}
controller层代码
@RequestMapping("/index")
public String index(Model model,
@RequestParam(required=true,value="pageNum",defaultValue = "1") int pageNum,
@RequestParam(required=true,value="pageSize",defaultValue = "5") int pageSize){
PageHelper.startPage(pageNum,pageSize);
List<Blog> blogs = blogService.findAll();
//将所有文章的浏览次数遍历在redis中
for (Blog blog : blogs) {
if(redisUtil.get("blog"+blog.getId())==null){
//设置一天后过期
redisUtil.set("blog"+blog.getId(),blog.getSeeCount(),86400);
}
}
.........
}
//文章内容页
@GetMapping("/blog/{id}")
public String blog(Model model, @PathVariable("id") int id){
Blog blog = siteService.findBlogById(id);
//博客文章内容页显示的浏览量在redis中取
//判断redis内存是否有该文章的浏览量
if(redisUtil.get("blog"+id)!=null){
//浏览量+1
redisUtil.incr("blog"+id,1);
}
model.addAttribute("seeCount",redisUtil.get("blog"+id));
model.addAttribute("blog",blog);
model.addAttribute("comments",commentService.findCommentById(id));
return "wangblog/artical";
}
使用总结
-
这里安利一个网站https://space.bilibili.com/95256449/,B站狂神,我是在他B站发布的教学视频学的Redis,
我的ssm框架,springboot,springcloud,elasticsearch等微服务框架都是从他那学的,虽然我暂时没在实战中用到过微服务技术,导致这些内容基本忘记了,不过狂神讲的是真心不错,后期我会重新补充一下。
-
本人为2021届应届毕业生,即将出来实习,其实自生技术并不算特别娴熟,希望能够在以后的时间多专研技术。
-
该Redis的简单应用,是在我的毕业设计上使用的,前面说到学以致用,就简单加上了,后期可能会使用到更多的技术把更多的东西存入的Redis缓存中,或者加如一些微服务技术(但是好像没那个必要,因为reids在多用户访问下才能体现出redis的有点,像我这种开发小白,后面把博客部署上线后,也是没多少访问量的)
这是我用springboot个人博客首页,样式很丑,由于本人前端实力有限页只能这样了