RedisTemplate的使用
RedisTemplate是Spring Data Redis提供的核心抽象类,是Spring Boot访问Redis服务器的底层实现。
有了RedisTemplate就不用Jedis的连接池或者直连,手动序列化对象,查询时还需要手动反序列化,还要处理各种异常和链接关闭
RedisTemplate就可以直接访问Redis服务,并且自动处理各种异常和链接关闭
redisTemplate.opsForValue().set("user:1", user); User result = (User) redisTemplate.opsForValue().get("user:1");
|
核心配置
RedisTemplate使用之前需要配置RedisConnectionFactory
@Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate( RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); template.afterPropertiesSet(); return template; } }
|
如果序列化配置不当或者不欸之序列化器,使用默认的JDK序列化。在Redis中可能就会存储乱码,查询时出现类型转换异常
所以我们必须显式配置序列化器。
key通常使用StringRedisSerializer,value通常使用Jackson2JsonRedisSerializer
核心操作接口(opsForXxxx)
@Service public class RedisService { @Autowired private RedisTemplate<String, Object> redisTemplate; public void demoAllOperations() { ValueOperations<String, Object> valueOps = redisTemplate.opsForValue(); valueOps.set("name", "张三"); String name = (String) valueOps.get("name"); ListOperations<String, Object> listOps = redisTemplate.opsForList(); listOps.leftPush("myList", "item1"); List<Object> list = listOps.range("myList", 0, -1); SetOperations<String, Object> setOps = redisTemplate.opsForSet(); setOps.add("mySet", "a", "b", "c"); Set<Object> set = setOps.members("mySet"); ZSetOperations<String, Object> zSetOps = redisTemplate.opsForZSet(); zSetOps.add("leaderboard", "user1", 100.0); Set<Object> topUsers = zSetOps.range("leaderboard", 0, 2); HashOperations<String, Object, Object> hashOps = redisTemplate.opsForHash(); hashOps.put("user:1", "name", "李四"); hashOps.put("user:1", "age", 25); Map<Object, Object> userMap = hashOps.entries("user:1"); } }
|