开始向导
添加 dependency spring-boot-starter-redis
,它默认使用 jedis
(还支持 JRedis,SRP 和 Lettuce)
一个简单的 Hash 示例:
@SpringBootApplication
public class RedisDemo implements CommandLineRunner {
@Autowired
private StringRedisTemplate stringRedisTemplate;
public static void main(String[] args) {
SpringApplication.run(RedisDemo.class).close();
}
public void run(String... args) throws Exception {
BoundHashOperations<String, String, String> ops = stringRedisTemplate.boundHashOps("com.foo");
ops.put("name", "bar");
ops.put("sex", "man");
System.out.println(ops.entries()); // 打印结果:{name=bar, sex=man}
}
}
RedisTemplate
RedisConnection 负责提供底层的数据操作;而 RedisTemplate 提供对 Redis 数据操作统一的抽象实现,并负责序列化存取的数据以及和 Redis 的连接管理。
StringRedisTemplate 继承自 RedisTemplate,用于操作基于字符串的存取操作。
针对 Redis 不同的存取类型,RedisTemplate 提供了不同的操作视图。
ValueOperations
ListOperations
SetOperations
ZSetOperations
HashOperations
HyperLogLogOperations
spring-data-redis 同时提供了绑定 key 的操作视图,省去每次都需要填写 key 的麻烦。
BoundValueOperations
BoundListOperations
BoundSetOperations
BoundZSetOperations
BoundHashOperations
RedisSerializer
RedisTemplate 默认采用 JdkSerializationRedisSerializer 序列化,提供的序列化类有:
- JdkSerializationRedisSerializer
- StringRedisSerializer
- OxmSerializer
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
我们也可以自己实现 RedisSerializer 接口的 serialize 和 deserialize 方法,来实现对自定义对象的序列化和反序列化存取。
@SpringBootApplication
public class RedisDemo implements CommandLineRunner {
@Autowired
private RedisTemplate redisTemplate;
public static void main(String[] args) {
SpringApplication.run(RedisDemo.class).close();
}
public void run(String... args) throws Exception {
redisTemplate.setValueSerializer(new DomainSerializer());
BoundValueOperations<String, Person> ops = redisTemplate.boundValueOps("foo.diy");
ops.getAndSet(new Person("foo"));
System.out.println(ops.get());
}
}
class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Domain{" +
"name='" + name + '\'' +
'}';
}
}
class DomainSerializer implements RedisSerializer<Person> {
@Override
public byte[] serialize(Person person) throws SerializationException {
return person.getName().getBytes();
}
@Override
public Person deserialize(byte[] bytes) throws SerializationException {
return new Person(new String(bytes));
}
}