Redis简介Redis的特点缓存概念(空间换时间)Redis实战
在接口中添加redis缓存Spring Boot缓存注解Window版的Redis全局文件配置
总结:
window版安装教程
由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页接口数据缓存到redis缓存中,减少数据库压力和提高访问速度。因为前台的用户量大,你可能需要加缓存,或者前台的用户进行身份校验,操作很多前端要加缓存比如Redis,量大,直接让你查数据库,容易把数据库搞崩。sprinboot自带缓存(mybatis)不是独立的,redis可以独立部署在另一台机器可以当分布式缓存,为多台服务器提供缓存服务(正如虚拟机linux部署Redis但是window的项目却可以通过Redis绑定的IP地址和端口号进行访问使用。) Redis简介
Redis的特点Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI
c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache的不足。和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所以Memcache的应用场景适用于缓存无需持久化的数据。而Redis不同的是它会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化。
频繁访问,基本不修改的数据才会放到Redis缓存中
缓存概念(空间换时间)Redis读取的速度是110000次/s,写的速度是81000次/s;原子 。Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。支持多种数据结构:string(字符串);list(列表);hash(哈希)set(集合);zset(有序集合)持久化,集群部署支持过期时间,支持事务,消息订阅
缓存概念
网站缓存按照存放的地点不同,可以分为客户端缓存、服务端缓存(Redis)。
缓存存在的最终目的是为了降低访问次数和资源加载时间。
浏览器缓存是最靠近用户的缓存,如果启用缓存,用户在访问同一个页面时,将不再从服务器下载页面,而是从本机的缓存目录中读取页面,然后再浏览器中展现这个页面。客户端缓存就是将网络资源存到本地电脑内存或者系统磁盘中,再次调用时直接调用缓存中资源。平时使用的加速小火箭清除的是内存中的缓存垃圾(已经关闭访问的资源但仍然残留内存占用)和系统文件清理清除的是C盘中的缓存垃圾(用过的网络资源残留文件)。
Redis属于服务端缓存中的数据缓存,存储到计算机内存中
若想用计算机处理数据都要先将数据加载到内存中再进行CPU数据处理,
因此远程网络资源必然要先加载到本地内存(或者内存-下载->磁盘-读取->内存)中再进行CPU处理。
而本地访问网络资源的方式关闭后,内存中的远程网络资源是否清除则是缓存的问题了。
例如:本地上网冲浪时,所有的可视化的娱乐页面等等信息都是远程运行商先将数据发送到本地内存中(此操作也是经过CPU处理运行的)然后CPU处理后才会显示,运行。
并且本地http请求也都是需要加载到内存后经过CPU处理后才会网络发送等等。
因为大多数情况下CPU只能和内存中程序进行数据计算交互,实现程序功能。
配置Key:Value的@Cacheable注解需要添加在Impl层方法上(此层方法才是进行数据库操作的地方)
Redis插件
@EnableCaching//开启缓存
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
RedisTemplate template = new RedisTemplate<>();
RedisSerializer redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setConnectionFactory(factory);
//key序列化方式
template.setKeySerializer(redisSerializer);
//value序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisSerializer redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置序列化(解决乱码的问题),过期时间600秒
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(600))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializevaluesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
return cacheManager;
}
}
在接口中添加redis缓存
由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页接口数据缓存到redis缓存中,减少数据库压力和提高访问速度。
Spring Boot缓存注解缓存的作用体现在查询上,若查询时缓存存在对应结果则直接返回缓存数据。
缓存需要跟随操作不断更新,保证缓存数据和数据库中数据一致,因此更新操作时需要同时更新缓存。
(1)缓存@Cacheable(查询数据库信息时同时更新缓存信息)
根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法上。
(2)缓存@CachePut(添加数据库信息时同时更新缓存信息)
使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。其他方法可以直接从响应的缓存中读取缓存数据,而不需要再去查询数据库。一般用在新增方法上。
(3)缓存@CacheEvict(更新,删除数据库信息时同时更新,删除缓存信息)
Window版的Redis全局文件配置使用该注解标志的方法,会清空指定的缓存。一般用在更新或者删除方法上。
localhost 、 127.0.0.1 、0.0.0.0 、本地IP的区别
因为配置的是Window版本地的Redis所以只需要127.0.0.1回访自身指定端口就行,反之若是使用linux虚拟机运行的Redis就需要写虚拟机的IP地址和端口号。
IP:定位服务器位置
端口号:定位程序在服务器运行位置
spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.database= 0 spring.redis.timeout=1800000 spring.redis.lettuce.pool.max-active=20 spring.redis.lettuce.pool.max-wait=-1 #最大阻塞等待时间(负数表示没限制) spring.redis.lettuce.pool.max-idle=5 spring.redis.lettuce.pool.min-idle=0
Redis绑定IP:端口号访问方式决定了Redis可以独立部署在另一台机器可以当分布式缓存,为多台服务器提供缓存服务(正如虚拟机linux部署Redis但是window的项目却可以通过Redis绑定的IP地址和端口号进行访问使用。)
总结:固定:导入Redis依赖,添加Redis插件,下载Redis,全局文件配置Redis连接执行参数。
在对应的方法上添加对应的缓存注解,执行后前端页面多次刷新查询可以观察到查询方法只执行一次SQL查询。(也可以下载Win版的Redis可视化工具)
Redis可视化管理工具(Redis Desktop Manager



