0%

Spring整合Redis

  • 引入依赖
    • spring-boot-starter-data-redis
  • 配置Redis
    • 配置数据库参数
    • 编写配置类,构造RedisTemplate
  • 访问Redis

配置redisTemplate

  • 为什么要配置
    • 默认是键值对,重新设置序列化方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);

//设置key的序列化方式
template.setKeySerializer(RedisSerializer.string());
//设置普通value序列化方式
template.setValueSerializer(RedisSerializer.json());
//设置hash的key的序列化方式
template.setHashKeySerializer(RedisSerializer.string());
//设置hash的value的序列化方式
template.setHashValueSerializer(RedisSerializer.json());

template.afterPropertiesSet();
return template;
}

访问Redis

  • 访问不同key
    • redisTemplate.opsForValue()
    • redisTemplate.opsForHash()
    • redisTemplate.opsForList()
    • redisTemplate.opsForSet()
    • redisTemplate.opsForZSet()
  • 处理key
    • 删除:redisTemplate.delete()
    • 查询是否存在:redisTemplate.hasKey()
    • 设置有效时间:redisTemplate.expire(key, time, 时间单位(TimeUnit.SECONDS))
  • 多次访问同一个key,绑定key
    • BoundValueOperations operations = redisTemplate.boundValueOps(redisKey)

Redis事务管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//编程式事务
@Test
public void testTransactional() {
Object obj = redisTemplate.execute(new SessionCallback() {
@Override
public Object execute(RedisOperations operations) throws DataAccessException {
String redisKey = "test:tx";

operations.multi(); //开启事务

operations.opsForSet().add(redisKey, "zhangsan");
operations.opsForSet().add(redisKey, "lisi");
operations.opsForSet().add(redisKey, "wangwu");

System.out.println(operations.opsForSet().members(redisKey));
return operations.exec(); //提交事务
}
});
System.out.println(obj);
}
------ THEEND ------

欢迎关注我的其它发布渠道