springboot+Redis+MyBatisCMS开源系统(含代码)

最近大表哥问我有没有好的java cms系统,做网站用,今天他来了,一款CMS开源系统-梦想家CMS内容管理系统 还是比较牛逼的。希望大家喜欢

springboot+Redis+MyBatisCMS开源系统(含代码)

DreamerCMS(梦想家CMS内容管理系统)公开解决了快速搭建展示型网站(如:企业官网、技术博客、信息门户等)的框架体系,是电子政务、电信综合门户、企业信息门户、知识管理平台、电子商务平台的基础性软件系统。可以帮助政府、企业或组织灵活、准确、高效、智能地管理信息内容,实现信息的采集、加工、审核、发布、存储、检索、统计、分析、 反馈等整个信息生命周期的管理。采用时下最流行的Springboot thymeleaf框架搭建,具有灵活小巧,配置简单,标签化模版,快速开发等特点。主要解决公司搭建网站成本高、投入大、周期长等问题,也可作为初创公司很好的基础技术框架。使用过程中不需要专业的后端技术开发技能,只要使用系统提供的模版标签,即可轻轻松松建设网站。欢迎关注Java项目分享

DreamerCMS从2.0.0版本开始采用了解析式引擎与编译式引擎并存的模式,由于在解析模版时,解析式引擎拥有巨大的优势,但对于动态浏览的互动性质的页面,编译式引擎更实用高效,DreamerCMS采用双引擎并存的模式,在保持标签风格一致性的同时,也保证将来开发更多互动模块时有更好的性能和更好的扩展。

特点

  • 免费完整开源:基于APACHE 2.0开源协议,源代码完全开源;
  • 标签化建站:不需要专业的后台开发技能,只要使用系统提供的标签,就能轻松建设网站;欢迎关注Java项目分享
  • 模版开发方便:支持在线上传模版包开发方便快捷;
  • 每月更新:每月进行系统升级,分享更多好用的模版与插件;

面向对象

  • 政府:可以使用Dreamer CMS来快速构建政府门户;
  • 电信:可以使用Dreamer CMS来快速构建电信综合门户;
  • 企业:可以使用Dreamer CMS构建信息门户,知识管理平台,也可作为基础技术框架,是企业在创立初期很好的技术选型;
  • 个人开发者:可以使用Dreamer CMS承接外包项目;

技术框架

  • 核心框架:Spring Boot 2
  • 安全框架:Apache Shiro 1.5
  • 视图框架:Spring MVC 4
  • 工具包:Hutool 5.3.7
  • 持久层框架:MyBatis 3
  • 日志管理:Log4j2
  • 模版框架:Thymeleaf
  • JS框架:jQuery,Bootstrap
  • CSS框架:Bootstrap
  • 富文本:Ueditor、editor.md
  • Lombok

系统结构

springboot+Redis+MyBatisCMS开源系统(含代码)

开发环境

建议开发者使用以下环境,这样避免版本带来的问题

  • IDE:Spring Tool Suite 4(STS)
  • DB:Mysql 5.7
  • JDK:jdk8
  • Redis:3.2
  • LomBok 项目需要使用Lombok支持,Lombok安装教程,请参考https://itechyou.cn/article/55ec2939c29147eca5bebabf19621655

快速入门

CMS包括两个部分(代码部分、资源部分)代码不多说。资源就是图片、模版等,该目录在application.yml中web.resource-path配置项目中配置。CMS包括两个部分(代码部分、资源部分)代码不多说。资源就是图片、模版等,该目录在application.yml中web.resource-path配置项目中配置。视频教程关注@Java清风私信【CMS】即可获取!

  1. 克隆项目到本地工作空间
  2. 导入Eclipse或Sts等开发工具(推荐使用Spring Tools Suite 4)(项目中缺少的google/kaptcha.jar在附件中,大家自行下载)
  3. 项目需要Redis,请自行修改application.yml中Redis配置
  4. 修改项目资源目录,application.yml文件web.resource-path配置项(如D:/dreamer-cms/)
  5. 将项目src/main/resources/db/dreamer-cms.zip文件解压,保证解压后的目录路径的名称和资源目录一致
  6. 运行项目DreamerCMSApplication.java
  7. 网站首页:http://localhost:8888 项目管理后台:http://localhost:8888/admin
  8. 管理后台用户名:wangjn;密码:123456
  9. 模版标签开发教程请参考:http://doc.itechyou.cn

系统美图

springboot+Redis+MyBatisCMS开源系统(含代码)

springboot+Redis+MyBatisCMS开源系统(含代码)

springboot+Redis+MyBatisCMS开源系统(含代码)

springboot+Redis+MyBatisCMS开源系统(含代码)

springboot+Redis+MyBatisCMS开源系统(含代码)

springboot+Redis+MyBatisCMS开源系统(含代码)

springboot+Redis+MyBatisCMS开源系统(含代码)

springboot+Redis+MyBatisCMS开源系统(含代码)

源码资料获取方式:关注小编 转发文章 私信【 0629】免费获取!!!!

Redis到底是单线程还是多线程

Redis 6.0版本之前的单线程指的是其网络I/O和键值对读写是由一个线程完成的。
Redis6.0引入的多线程指的是网络请求过程采用了多线程,而键值对读写命令仍然是单线程
处理的,所以Redis依然是并发安全的。
也就是说只有网络请求模块和数据操作模块是单线程的,而其它的持久化、集群数据同步等,
其实是由额外的线程执行的。

springboot+Redis+MyBatisCMS开源系统(含代码)

Redis单线程为什么还能这么快

1、命令执行基于内存操作,一条命令在内存里操作的时间是几十纳秒。
2、命令执行是单线程操作,没有线程切换开销。
3、基于IO多路复用机制提升Redis的I/O利用率。
4、高效的数据存储结构:全局hash表以及多种高效数据结构,比如:跳表,压缩列表,链
表等等。

springboot+Redis+MyBatisCMS开源系统(含代码)

Redis底层数据是如何用跳表来存储的

跳表:将有序链表改造为支持近似“折半查找”算法,可以进行快速的插入、删除、查找操作。

springboot+Redis+MyBatisCMS开源系统(含代码)

Redis Key过期了为什么内存没释放

你在使用 Redis 时,肯定会经常使用 SET 命令。
SET 除了可以设置 key-value 之外,还可以设置 key 的过期时间,就像下面这样:

1 127.0.0.1:6379> SET tuling zhuge EX 120
2 OK
3 127.0.0.1:6379> TTL tuling
4 (integer) 117

此时如果你想修改 key 的值,但只是单纯地使用 SET 命令,而没有加上过期时间的参数,那这个时候 key 过期时间将会被擦除。

1 127.0.0.1:6379> SET tuling zhuge666
2 OK
3 127.0.0.1:6379> TTL tuling // key永远不过期了!
4 (integer) ‐1

导致这个问题的原因在于:SET 命令如果不设置过期时间,那么 Redis 会自动擦除这个key 的过期时间。

如果你发现 Redis 的内存持续增长,而且很多 key 原来设置了过期时间,后来发现过期时间丢失了,很有可能是因为这个原因导致的。

这时你的 Redis 就会存在大量不过期的 key,消耗过多的内存资源。
所以,你在使用 SET 命令时,如果刚开始就设置了过期时间,那么之后再修改这个 key,也务必要加上过期时间的参数,避免过期时间丢失问题。
Redis对于过期key的处理一般有惰性删除和定时删除两种策略。
1、惰性删除:当读/写一个已经过期的key时,会触发惰性删除策略,判断key是否过期,如果过期了直接删除掉这个key。
2、定时删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期(默认每100ms)主动淘汰一批已过期的key,这里的一批只是部分过期key,所以可能会出现部分key已经过期但还没有被清理掉的情况,导致内存并没有被释放。

Redis Key没设置过期时间为什么被Redis主动删除了

当Redis已用内存超过maxmemory限定时,触发主动清理策略。
主动清理策略在Redis 4.0之前一共实现了 6 种内存淘汰策略,在 4.0 之后,又增加了 2 种
策略,总共8种:
a) 针对设置了过期时间的key做处理:1. volatile-ttl:在筛选时,会针对设置了过期时间的键值对,根据过期时间的先后进
行删除,越早过期的越先被删除。

  1. volatile-random:就像它的名称一样,在设置了过期时间的键值对中,进行随机
    删除。
  2. volatile-lru:会使用 LRU 算法筛选设置了过期时间的键值对删除。
  3. volatile-lfu:会使用 LFU 算法筛选设置了过期时间的键值对删除。
    b) 针对所有的key做处理:
  4. allkeys-random:从所有键值对中随机选择并删除数据。
  5. allkeys-lru:使用 LRU 算法在所有数据中进行筛选删除。
  6. allkeys-lfu:使用 LFU 算法在所有数据中进行筛选删除。
    c) 不处理:
  7. noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息”
    (error) OOM command not allowed when used memory”,此时Redis只响应读操作。

Redis淘汰Key的算法LRU与LFU区别

LRU 算法(Least Recently Used,最近最少使用):淘汰很久没被访问过的数据,以最近一次访问时间作为参考。LFU 算法(Least Frequently Used,最不经常使用):淘汰最近一段时间被访问次数最少的数据,以次数作为参考。绝大多数情况我们都可以用LRU策略,当存在大量的热点缓存数据时,LFU可能更好点。

删除Key的命令会阻塞Redis吗

有可能的,我们看下DEL Key命令的时间复杂度:
删除单个字符串类型的 key ,时间复杂度为 O(1)。
删除单个列表、集合、有序集合或哈希表类型的 key ,时间复杂度为 O(M),
M 为以上数据结构内的元素数量。
如果删除的是列表、集合、有序集合或哈希表类型的 key,如果集合元素过多,是会阻塞
Redis的。对于这种情况我们可以借助scan这样的命令循环删除元素。如果删除的是字符串类型的 key,但是key对应value比较大,比如有几百M,那么也是会
阻塞Redis的。这种bigkey是我们要尽量减少出现的情况。

Redis主从、哨兵、集群架构优缺点比较

springboot+Redis+MyBatisCMS开源系统(含代码)

在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,
如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复
杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情
况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存
也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率

springboot+Redis+MyBatisCMS开源系统(含代码)

redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特点
性。Redis集群不需要sentinel哨兵∙也能完成节点移除和故障转移的功能。需要将每个节点
设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到
上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的
哨兵模式,且集群配置非常简单。

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/tech/29991.html

发表评论

登录后才能评论