app开发者平台在数字化时代的重要性与发展趋势解析
852
2022-12-01
SpringBoot整合篇 04、Springboot整合Redis
文章目录
一、SpringBoot集成Redis
1.1、快速集成1.2、编写测试类及测试
二、SpringCache集成Redis
2.1、快速集成2.2、快速实现cache查询
参考文章
一、SpringBoot集成Redis
1.1、快速集成
引入依赖:
application.yaml:
server: port: 8001spring: redis: # 地址 host: localhost # 端口,默认为6379 port: 6379 # 数据库索引 database: 0 # 密码 password: 123456 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms
1、配置序列化器(使用fastjson来进行序列化)以及RedisTemplate的bean初始化
config/FastJsonRedisSerializer.java:
package com.changlu.springbootdemoredis.config;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.parser.ParserConfig;import com.alibaba.fastjson.serializer.SerializerFeature;import com.fasterxml.jackson.databind.JavaType;import com.fasterxml.jackson.databind.type.TypeFactory;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.SerializationException;import java.nio.charset.Charset;/** * Redis使用FastJson序列化 * * @author changlu */public class FastJsonRedisSerializer
config/RedisConfig.java:
package com.changlu.springbootdemoredis.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.StringRedisSerializer;@Configurationpublic class RedisConfig { @Primary @Bean @SuppressWarnings(value = { "unchecked", "rawtypes" }) public RedisTemplate
2、封装RedisTemplate工具类
utils/RedisCache.java:
package com.chuangmeng.horserace.utils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.*;import org.springframework.stereotype.Component;import redis.clients.jedis.ScanParams;import redis.clients.jedis.ScanResult;import redis.clients.jedis.commands.JedisCommands;import redis.clients.jedis.commands.MultiKeyCommands;import java.util.*;import java.util.concurrent.TimeUnit;/** * redis工具类 */@SuppressWarnings(value = { "unchecked", "rawtypes" })@Componentpublic class RedisCache{ @Autowired public RedisTemplate redisTemplate; /** * 缓存基本的对象,Integer、String、实体类等 * * @param key 缓存的键值 * @param value 缓存的值 */ public
1.2、编写测试类及测试
controller/HelloController.java:
package com.changlu.springbootdemoredis.controller;import com.changlu.springbootdemoredis.utils.RedisCache;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;/** * @Description: * @Author: changlu * @Date: 9:03 PM */@RestControllerpublic class HelloController { @Autowired private RedisCache redisCache; @GetMapping("/hello") public String hello(){ redisCache.setCacheObject("changlu", 666); return "success"; }}
接着我们运行项目:
ok此时就已经快速集成好redis!
二、SpringCache集成Redis
2.1、快速集成
Spring cache 使用Redis做分布式缓存:非常详细
接着我们继续一章节继续来集成Spring Cache。
1、首先来添加依赖:
2、在RedisConfig.java中添加一个Bean的注入,这个Bean对应的cache stater中的RedisCacheConfiguration:
@Beanpublic RedisCacheManager cacheManager(RedisConnectionFactory factory, RedisTemplate customRedisTemplate){ //可以配置缓存过期时间,是否缓存null值,配置前缀,配置数据转换器 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(customRedisTemplate.getValueSerializer())); RedisCacheManager cacheManager = RedisCacheManager.builder(RedisCacheWriter.lockingRedisCacheWriter(factory)) .cacheDefaults(config) .build(); return cacheManager;}
3、在启动器上添加@EnableCaching注解,表示开启Spring的Cache缓存。
@EnableCaching
4、开始使用注解来达到缓存效果
@Cacheable 标注位置:方法或者类上,标识该方法或类支持缓存 效果:Spring调用注解标识方法后会将返回值缓存到redis,以保证下次同条件调用该方法时直接从缓存中获取返回值。这样就不需要再重新执行该方法的业务处理过程,提高效率 常用三个参数: cacheNames 缓存名称 key 缓存的key,需要注意key的写法哈 condition 缓存执行的条件,返回true时候执行
2.2、快速实现cache查询
初始demo参考:Spring cache 使用Redis做分布式缓存失效时间:Springboot使用@Cacheable 更优雅的使用缓存 以及如何设置失效时间、@cacheable设置过期时间_Spring cache整合Redis,并给它一个过期时间!
pojo/user.java:
package com.changlu.springbootdemoredis.pojo;/** * @Description: * @Author: changlu * @Date: 9:16 PM */public class User { private String name; private String password; private Integer age; public User() { } public User(String name, String password, Integer age) { this.name = name; this.password = password; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", password='" + password + '\'' + ", age=" + age + '}'; }}
service/UserService.java:
package com.changlu.springbootdemoredis.service;import com.changlu.springbootdemoredis.pojo.User;/** * @Description: * @Author: changlu * @Date: 9:17 PM */public interface UserService { User getUserById(Integer id); User updateUser(User user);}
service/UserServiceImpl.java:
package com.changlu.springbootdemoredis.service;import com.changlu.springbootdemoredis.pojo.User;import org.springframework.cache.annotation.Cacheable;import org.springframework.stereotype.Service;/** * @Description: * @Author: changlu * @Date: 9:17 PM */@Servicepublic class UserServiceImpl implements UserService{ @Override @Cacheable(cacheNames = "cache_user", key="'user_' + #id") public User getUserById(Integer id) { return new User("changlu", "123456", id); } @Override public User updateUser(User user) { return null; }}
接着在HelloController中添加一个查询代码:
@Autowiredprivate UserService userService;@GetMapping("/user/{id}")public User getUserById(@PathVariable("id") Integer id) { return userService.getUserById(id);}
参考文章
[1]. Java|SpringBoot整合Redis
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~