基于springboot+mybatis+bootstrap搭建前后端系统(四:springboot整合redis)

    技术2022-07-20  70

    四:整合redis

    redis介绍项目引入redis之后的效果使用redis之后,前端发起请求,后端会先查redis中对应的key,如果key对应的数据存在,直接返回数据,不存在则从数据库中查询数据保存到redis中并返回。代码中使用redis最初的redis中没有值第一次查询数据从数据库中获取并将数据存到redis中![在这里插入图片描述](https://img-blog.csdnimg.cn/20200703090820149.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTE3MjA3OQ==,size_16,color_FFFFFF,t_70)再次刷新页面,直接从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; /** * redis配置 * @Author soyking **/ @Configuration // 开启spring cache注解功能 @EnableCaching public class RedisCacheConfig extends JCacheConfigurerSupport { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 可以配置对象的转换规则,比如使用json格式对object进行存储。 // Object --> 序列化 --> 二进制流 --> redis-server存储 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接口

    Processed: 0.019, SQL: 9