redis自定义RedisTemplate和封装成工具类
pom
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
config类
//jetbrains://idea/navigate/reference?project=sprintboot&path=com/cmk/spingboot09redis/config/RedisConfig.java:13:1
@Configuration
public class RedisConfig {
//编写我们自己的 redis Template
//这是我给大家写好的一个固定模板,大家在企业中,拿去就可以直接使用!
//自己定义了一个RedisTemplate
//<bean id=redisTemplate class=RedisTemplate>
@Bean
@SuppressWarnings("all")
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
//我们为了自己开发方便,一般直接使用<string,object>
RedisTemplate<String, Object> template = new RedisTemplate<String,Object>();
template.setConnectionFactory(factory);
//Json序列化配理
Jackson2JsonRedisSerializer<Object> 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);
//string的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
//hash 的key出采用string的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
//hashyvalue序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
工具类
//jetbrains://idea/navigate/reference?project=sprintboot&path=com/cmk/spingboot09redis/utils/RedisUtil.java:6:1
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
/**
* 普通缓存获取
* @param key
* @return
*/
public Object get(String key){
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 普通缓存放入
* @param key
* @param value
* @return
*/
public boolean set(String key,Object value){
try {
redisTemplate.opsForValue().set(key,value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
application.properties
jetbrains://idea/navigate/reference?project=sprintboot&path=application.properties:1:1
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.lettuce.pool.max-active=8
测试控制器
//jetbrains://idea/navigate/reference?project=sprintboot&path=com/cmk/spingboot09redis/Spingboot09RedisApplicationTests.java:14:1
@SpringBootTest
class Spingboot09RedisApplicationTests {
@Autowired
@Qualifier("redisTemplate")
private RedisTemplate redisTemplate;
@Autowired
private RedisUtil redisUtil;
@Test
void contextLoads() {
//redisTemplate 操作不同的数据类型,api和我们的指令是一样的
//opsForValue 操作字符类似string
//opsForList 操list 类似List
//opsForSet
//opsForHash
//opsForZSet
//opsForGeo
//opsForHyperLogLog
//除了进本的操作,我们常用的方法都可以直接通过redis Template操作,比如事务,和基本的CRUD
//获取redis的连接对象
/* RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
connection.flushDb();
connection.flushAll();*/
redisTemplate.opsForValue().set("mykey","test");
System.out.println(redisTemplate.opsForValue().get("mykey"));
}
@Test
public void test() throws JsonProcessingException {
//真实的开发一般使用用son来传递对象
User user = new User("cc", 12);
/* String jsonUser = new ObjectMapper().writeValueAsString(user);
redisTemplate.opsForValue().set("user2",jsonUser);*/
redisTemplate.opsForValue().set("user3",user);
System.out.println(redisTemplate.opsForValue().get("user3"));
}
@Test
public void test2(){
redisTemplate.opsForValue().set("mykey2","xxxyyy");
System.out.println(redisTemplate.opsForValue().get("mykey2"));
}
//使用自己封装工具操作
@Test
public void test3(){
redisUtil.set("age","8888");
System.out.println(redisUtil.get("age"));
}
}