Redis
1、JVM内置缓存:值存放在JVM缓存中,容易造成内存溢出,没有持久化机制,存在多服务器数据不能共享
mybatis二级缓存机制oscache
hibernate二级缓存机制escache
oscache主要针对数据库访问层
escache主要针对页面缓存
2、关系型数据库特征:主外键、SQL语句、存放在硬盘上边
非关系型数据库:值存放在内存中
3、Redis的应用----token生成、session共享、分布式锁、自增id、验证码
Redis一定要设置有效期。
Redis五种基本数据类型:string、set、zset、hash、list
Redis存放list数据类型用lpush 获取lrange
set数据类型存放用asdd 不允许重复 查询使用SMEMBERS 无序的
zset数据类型存放用zadd 不允许重复 能够指定顺序
string数据类型存放用set 查询get
hash数据类型存放 HMSET
4、数据库中的值与Redis值不同怎么解决
清空缓存,再同步数据库中的值,缓存到redis
5、Redis中怎么存放对象?用什么数据类型
使用string类型,采用json格式,将对象转换为json格式存放在redis中,从redis中获取到json值,反序列化成对象。
6、Redis的主从机制、哨兵机制和高可用的实现
搭建Redis集群缓解数据库压力和内存压力时,
Redis会有一个主从机制,主(master)服务器有读和写的权限,从(slave)服务器只有读的权限
Redis的哨兵机制会时刻监听redis集群的状态,如果主服务器宕机了,哨兵机制会通过投票选举一个主服务器(高可用的体现),如果全部集群全部宕机了,使用keepalived监听,完成自动重启,如果重启失败,用邮件方式进行通知。
使用keepalived监听,实现服务器重启
keepalived加上哨兵机制才是Redis高可用的实现。
keepalived是一个重启脚本,做监听程序。
7、Redis主从复制
从服务器启动的时候,会自动把主服务器的快照文件(rdb)拿过来,实时更新的。
8、同步接口中,如果网络延迟,可能会产生重复提交,接口重复提交如何解决
使用token(令牌):调用请求,获取一个token令牌,这个令牌只能使用一次,当这个令牌使用第二次会报错。
9、Activemq中途宕机了如何解决?
Activemq提供了一种失效转移策略。失效转移提供了在传输层上重新连接到其他任何传输器的功能,只需在uri中配置即可,Failover:(uri1.....n)。如果发现uri失效了,它会向其他可连接的的uri列表中重连,为了负载均衡策略,不会一直连接第二个,随即连接。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、高并发解决方案
1、数据库解决方面
1.首先使用慢查询定位sql语句
2.进行sql语句优化
3.减少全表扫描
sql语句优化:使用索引、分表分库(水平+垂直分割)、
主从复制(MySQL集群时):使用二进制文件进行主从复制
读写分离
2、缓存机制
1.使用redis缓存数据库内容
2.redis集群(使用主从复制实现redis集群)
3.redis实现读写分离
4.使用redis的哨兵机制监听
3、服务器端
反向代理、配置负载均衡、使用集群、CDN加速(多个地区进行部署服务器,从近访问服务器,减少带宽传输)
4、客户端
减少请求次数、使用Ajax异步加载、动静分离
5、项目优化
进行代码重构
JVM调优:主要使用垃圾回收机制,配置JVM参数配置
项目采用微服务和分布式架构