四:整合redis
redis介绍项目引入redis之后的效果使用redis之后,前端发起请求,后端会先查redis中对应的key,如果key对应的数据存在,直接返回数据,不存在则从数据库中查询数据保存到redis中并返回。代码中使用redis最初的redis中没有值第一次查询数据从数据库中获取并将数据存到redis中再次刷新页面,直接从redis中取数,不再查询数据库
spirngboot项目配置及使用依赖引入配置文件初始化配置文件(核心类)代码中使用
常见问题
redis介绍
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 redis中文官网:http://www.redis.cn/ redis下载安装:http://www.redis.cn/download.html redis安装非常简单,看上面官网安装即可,这里不再额外说明,文章后面有说明安装和使用需要的注意的事项和配置。
项目引入redis之后的效果
使用redis之后,前端发起请求,后端会先查redis中对应的key,如果key对应的数据存在,直接返回数据,不存在则从数据库中查询数据保存到redis中并返回。
代码中使用redis
最初的redis中没有值
第一次查询数据从数据库中获取并将数据存到redis中
再次刷新页面,直接从redis中取数,不再查询数据库
spirngboot项目配置及使用
依赖引入
<!-- redis依赖
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-data
-redis
</artifactId
>
</dependency
>
配置文件
#redis相关配置
spring
.redis
.host
=10.14.13.199
spring
.redis
.port
=6379
初始化配置文件(核心类)
package com
.soyking
.blogs
.utils
;
import org
.springframework
.cache
.CacheManager
;
import org
.springframework
.cache
.annotation
.EnableCaching
;
import org
.springframework
.cache
.jcache
.config
.JCacheConfigurerSupport
;
import org
.springframework
.context
.annotation
.Bean
;
import org
.springframework
.context
.annotation
.Configuration
;
import org
.springframework
.data
.redis
.cache
.RedisCacheConfiguration
;
import org
.springframework
.data
.redis
.cache
.RedisCacheManager
;
import org
.springframework
.data
.redis
.cache
.RedisCacheWriter
;
import org
.springframework
.data
.redis
.connection
.RedisConnectionFactory
;
import org
.springframework
.data
.redis
.core
.RedisTemplate
;
import org
.springframework
.data
.redis
.serializer
.JdkSerializationRedisSerializer
;
import org
.springframework
.data
.redis
.serializer
.StringRedisSerializer
;
@Configuration
@EnableCaching
public class RedisCacheConfig extends JCacheConfigurerSupport {
@Bean
public RedisTemplate
redisTemplate(RedisConnectionFactory redisConnectionFactory
){
RedisTemplate redisTemplate
= new RedisTemplate();
redisTemplate
.setConnectionFactory(redisConnectionFactory
);
redisTemplate
.setKeySerializer(new StringRedisSerializer());
redisTemplate
.setValueSerializer(new JdkSerializationRedisSerializer());
return redisTemplate
;
}
@Bean
public CacheManager
cacheManager(RedisConnectionFactory redisConnectionFactory
){
RedisCacheWriter redisCacheWriter
= RedisCacheWriter
.nonLockingRedisCacheWriter(redisConnectionFactory
);
RedisCacheConfiguration redisCacheConfiguration
= RedisCacheConfiguration
.defaultCacheConfig();
CacheManager cacheManager
= new RedisCacheManager(redisCacheWriter
,redisCacheConfiguration
);
return cacheManager
;
}
}
代码中使用
使用cacheable注解即可 注意key值如果不是引用参数必须用单引号 key=" ‘string’ " 包住字符串
常见问题
redis服务器拒绝连接
io
.lettuce
.core
.RedisConnectionException
: DENIED Redis is running in
protected mode because
protected mode is enabled
, no bind address was specified
, no authentication password is requested to clients
.
redis启动之后有保护机制,拒绝外网访问, 修改配置文件redis.conf 序列化问题
Request processing failed
; nested exception is org
.springframework
.data
.redis
.serializer
.SerializationException
: Cannot serialize
; nested exception is org
.springframework
.core
.serializer
.support
.SerializationFailedException
: Failed to serialize object using DefaultSerializer
;
保存到redis的对象必须实现Serializable接口