文章详情页面静态化方案

1、基于freemarker生成模板 xxx.ftl
2、将模板中需要替换的地方用java代码替换掉
3、调用freemarker的api将替换好的模板生成html文件
4、将生成好的html页面上传到minio中
5、将返回的路径地址写入数据库表中,供前端访问

freemarker介绍

FreeMarker 是一款 模板引擎,基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具
基于redis实现用户关注和取关功能

redis常见数据结构
string
list:有序、可重复
zset:有序、不可重复
hash
set

redis持久化机制

一种是RDB快照,它是基于快照思想当符合某一条件时,redis会将这一刻的内存数据进行快照保存到硬盘上,产生一个经过压缩的二进制文件文件名为 xxx.rdb,当有服务器宕机时,只要rdb文件存在,就可以利用它还原数据。
一种是AOF。与RDB不同的是AOF保存的是操作命令而非数据,将操作命令保存到AOF文件中,这样,当redis重启后,读取AOF文件,按顺序获取到修改命令,即可完成数据恢复
AOF的触发方式有三种:always、everysec、no。默认使用的是everysec,可通过redis.conf中appendfsync属性进行配置。
always:每次执行写入命令都会将将命令写入AOF文件,并将AOF文件同步到磁盘,此方式效率最低,安全性最高
everysec:每一秒将写入命令写入AOF文件中,
no:每30秒一次,将写入命令写入AOF文件中
随着时间和数据的积累,AOF文件会变得越来越大,占用大量存储空间,数据还原花费的时间越多,redis提供重写功能对其优化,当AOF文件体积超过阈值时,会触发重写
redis事务机制

redis项目中应用场景

利用redis进行用户的关注、取关行为
利用redis缓存热点文章

redis的高可用架构

主从复制:
1、当从库启动时,会链接主库,并发送数据同步请求,建立主从关系
2、当主库收到从库发出的请求时,会立即执行bgsave命令,会将主库所有的数据持久化到RDB文件中
3、主库会把RDB文件发送给从库
4、从库收到文件后,会删除旧数据,装载新数据
缺点:当主库宕机时,无法进行写操作,需要人工进行更替
哨兵模式:
需要搭建哨兵集群,这里的哨兵也是redis,只不过不进行读写操作,只负责监控主节点的健康状态
但主节点宕机后,哨兵会检测到,当超过半数加一个哨兵检测到主节点宕机时,会从从节点中选择一个变更为主节点,当之前的主节点正常时,会变为现在主节点的从节点
分片集群:
前两种最大的局限只能在一个服务器上写,有并发写的问题
分片集群允许有多个主节点,redis准备了16384个hashslot(哈希槽),这些哈希槽会和参与存数据的节点有绑定关系(默认平均分配的节点上),存数据时,会根据key利用crc16的算法对16384取余,根据取余结果决定在哪个节点存数据
当某一个主节点宕机时,其他主节点超过半数检测到其宕机时,会从其从节点变更为主节点。
理论上可以分16384个主节点

redis中 key过期删除策略

定时删除:
它会在设置键的过期时间的同时,创建一个定时器,当键到了过期时间,定时器会立即对键进行删除
该策略对内存空间足够友好,但对cpu非常不友好,会拉低系统性能,不建议使用
惰性删除:
他不持续关注key的过期时间,而是在获取key的时候,检查key是否过期,若过期则删除
惰性删除对cpu足够友好,但是对内存空间非常不友好,会造成大量内存空间浪费
定期删除
折中策略,每隔一段时间进行检查,会对过期key进行删除
默认每秒运行10次,每次获取20个key,同时删除这20个key中过期的key,如果这20个key中过期的key比例在25%以上,会继续扫描

redis中 内存淘汰策略

当客户端执行命令,添加数据时,Redis会检查内存空间大小,如超过最大内存,则触发内存淘汰策略
对设置了过期时间数据淘汰:
volatile-lru:删除设置了过期时间,且最近最久未被使用的key
volatile-lfu:删除设置了过期时间,且最近最少未被使用的key
volatile-ttl:删除了过期时间,且即将过期的key
volatile-random:从删除设置了过期时间的key中随即删除
对所有数据淘汰:
allkeys-lru:从所有key中,删除最近最久未被使用的key
allkeys-lfu:从所有key中,删除最近最少未被使用的key
allkeys-random:从所有key中随即删除
不淘汰:
noevction:不删除,当内存空间不足时,直接返回错误信息