先缓存中取数据,如果换成没有就去数据库取数据,然后数据也存入缓存中。(service层实现)
如果进行修改和删除数据,缓存同步:
删除缓存,处理数据,数据放入缓存;
连接操作命令:quit关闭连接;auth:简单密码验证;help cmd:查看帮助
持久化:save:数据同步保存到磁盘;bgsave:数据异步保存到磁盘;shutdown:同步保存到磁盘,然后关闭服务;
远程服务控制:info:提供服务器信息统计;monitor:实时转储收到的请求;
对value的操作:exists(key)确定key存在;del(key)删除key;type(key):返回key的类型;
String: set(key,value)给数据库中key的String赋予值value; get(key):返回数据库中名称为key的value;
1、热点数据,经常访问的放入缓存,降低数据库的IO,方便告诉查询,加快整个系统的响应速度,提高并发能力;
2、查询耗时数据,提高响应速度;
redis是key-value进行存储,不能直接存储对象,先进行序列化后或者转换为JSON格式进行存储
Serializable接口、Json序列化
SerializeUtil
实现序列化类,实现Serializable接口;
对redis操作接口的实现类,RedisCacheStorageImpl2.
pom文件导入序列化依赖;
redis.properties文件配置及spring文件配置;
写一个RedisUtil来获取和释放redis资源,得到Jedis对象;
创建好RedisUtil后,写redis操作的接口及其实现类;
service层调用redis的操作接口;
app客户端,看板统计数据汇总,数据来自不同库;
https://www.cnblogs.com/jy107600/p/8110173.html
关键代码:
1、取mysql中查询各个接口的信息
getPanelInfo.java
List
panels = panelService.getAllPanels();
2、根据拿到的信息生成请求参数
getPanelInfo.java
WrapResponseModel resonseModel = new WrapReaponseModel();
Map
headers = new HashMap<>(); headers.put("username",username);
headers.put("token",token);
for(PanelDto panelDto:panel){
//发送http请求
content.add(HttpRequestUtils.get(panelDto.getUrl(),headers));
}
//返回格式
responseModel.setCode(SUCCESS_CODE);
responseModel.setData(content);
3、发送http请求调用接口
创建HttpClient对象;
发送get请求;
执行get请求,得到Response对象;
httpResponse.getStatusLine()响应头信息,进行检测是否时200(正常);
返回对象HttpEntity;
4、查询数据set进redis,之后返回查询的数据
getPanInfo.java
if(!Objects.equals(redisCache,"false")){
//redis_TTL过期时间
redisProxyHandler.set(redisKey,JSON.toJSONString(responseModel), REDIS_TTL);
logger.error("set!");
}
redisHandler.java
public void set(String key, String value, int seconds){
redisCacheProvider.set(key,value,seconds);
}
redisProvider.java
@Autowired
private JedisPool jedisPool;public Jedis getJedis() {
Jedis jedis = this.jedisPool.getResource();
// 使用index为2的database
jedis.select(2);
return jedis;
}public void set(String key, String value, int seconds) {
Jedis jedis = null;
try {
jedis = getJedis();
jedis.setex(key, seconds, value);
Long exp = jedis.ttl(key);
if (exp < 0) {
throw new RuntimeException("data time out!");19 }
} catch (Throwable e) {
logger.error(e.getMessage(), e);
throw new TokenException(e.getMessage());
} finally {
if(jedis != null){jedis.close;}
}
}
5、请求接口的时候,先请求redis婚车,如果命中返回命中数据,否则执行http请求拼凑数据
String panelInfo = redisProxyHandler.get(redisKey);
Long expire = redisProxyHandler.getExpire(redisKey);
//命中才返回,否则会去发http请求
if (Objects.nonNull(panelInfo) && (expire > 0) && expireresponseModel = JSON.parseObject(panelInfo, WrapResponseModel.class);
return responseModel;
}
关系型数据库,web应用最好的数据库,管理数据库管理系统;
优点:
体积小,速度快,成本低、开源、支持多个操作系统
采用完全的多线程编程,灵活提供服务,充分利用CPU;
灵活而安全的权限和口令系统;提供用户界面可视化操作方便;
缺点:
不支持热备份;不支持自定义数据类型;
最大缺点安全系统,复杂非标准;
对xml支持不够良好;
Redis和MongoDB非关系型,采用结构型数据存储;
MongoDB建议集群部署,Redis侧重进行顺序写入;
key-value存储,数据结构服务器。value可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
优点:
读写性能优异;支持数据持久化,支持AOF和RDB两者持久化
支持主从复制,主机自动将数据同步到从机,可以读写分离;
缺点:
不能自动容错和恢复;
主机宕机,容易出现数据不一致问题;
主从复制采取全复制;
支持在线扩容;
基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能,集群。
将数据存储为一个文档,数据结构由键值(key=>value)对组成。
优点:
弱一致,保证用户访问速度;
文档存储,便捷获取;性能优越;
缺点:
不支持事务操作;占空间大;