一、缓存概述
缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。
1、缓存的原理
将数据写入/读取速度更快的存储(设备);
将数据缓存到离应用最近的位置;
将数据缓存到离用户最近的位置。
2、缓存分类
在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用。
CDN缓存;
反向代理缓存;
分布式Cache;
本地应用缓存;
3、缓存媒介
常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等;
缓存的内容:文件,数据,对象;
缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式)
4、缓存设计
缓存设计需要解决以下几个问题:
缓存什么?
哪些数据需要缓存:1.热点数据;2.静态资源。
缓存的位置?
CDN,反向代理,分布式缓存服务器,本机(内存,硬盘)
如何缓存的问题?
过期策略
固定时间:比如指定缓存的时间是30分钟;
相对时间:比如最近10分钟内没有访问的数据;
同步机制
实时写入;(推)
异步刷新;(推拉)
二、Redis
1、搭建
以docker的形式搭建
docker run -di --name=mytest_redis -p 6379:6379 redis
2、SpringDataRedis
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问
redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate
提供了redis各种操作。
1)在pom.xml中引依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2)修改application.yml,在spring节点下添加配置
redis:
host: 192.168.184.134
3)在类中引入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
/**
* 根据ID查询实体
* @param id
* @return
*/
public Hello findById(String id) {
//从缓存中提取
Hello hello=
(Hello)redisTemplate.opsForValue().get("hello_"+id);
// 如果缓存没有则到数据库查询并放入缓存
if(hello==null) {
hello = helloDao.findById(id).get();
redisTemplate.opsForValue().set("hello_" + id, hello);
}
return Hello;
}
/**
* 修改
* @param hello
*/
public void update(Hello hello) {
redisTemplate.delete( "hello_" + hello.getId() );//删除缓存
helloDao.save(hello);
} /
**
* 删除
* @param id
*/
public void deleteById(String id) {
redisTemplate.delete( "hello_" + id );//删除缓存
helloDao.deleteById(id);
}
//缓存过期处理,如设置1天的过期时间
redisTemplate.opsForValue().set("hello_" + id, hello,1,
TimeUnit.DAYS);
参考
官网http://redisinaction.com/preview/chapter1.html
https://blog.csdn.net/qq_26517369/article/details/78330694
网友评论