1、StringRedisTemplate简介
Redis的String数据结构 (推荐使用StringRedisTemplate)。
1.1、StringRedisTemplate 源码
public class StringRedisTemplate extends RedisTemplate<String, String> {
public StringRedisTemplate() {
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
setKeySerializer(stringSerializer);
setValueSerializer(stringSerializer);
setHashKeySerializer(stringSerializer);
setHashValueSerializer(stringSerializer);
}
public StringRedisTemplate(RedisConnectionFactory connectionFactory) {
this();
setConnectionFactory(connectionFactory);
afterPropertiesSet();
}
protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {
return new DefaultStringRedisConnection(connection);
}
}
【注意】通过源码我们发现StringRedisTemplate是继承RedisTemplate的一个子类。StringRedisTemplate使用的序列化方式是StringRedisSerializer。
1.2、StringRedisTemplate与RedisTemplate关系
【StringRedisTemplate与RedisTemplate之间的关系】
(1)两者的关系是StringRedisTemplate继承RedisTemplate。
(2)两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
(3)SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
1.3、过期时间
在设置值时参数含有long timeout, TimeUnit unit是对过期时间的设置。
#opsForValue字符串操作中
void set(K key, V value, long timeout, TimeUnit unit);
TimeUnit 是个枚举类型:
(1)TimeUnit.DAYSB表示多少天;
(2)TimeUnit.HOURS表示多少小时;
(3)TimeUnit.MINUTES表示多少分钟;
(4)TimeUnit.SECONDS表示多少秒;
(5)TimeUnit.MILLISECONDS表示毫秒;
2、StringRedisTemplate操作
【字符串操作】
@Autowired
private StringRedisTemplate redisTemplate;
/**
* StringRedisTemplate字符串操作opsForValue()方法
*
*/
@Test
public void opsForValueTest(){
redisTemplate.opsForValue().set("city1","北京");
String city1 = redisTemplate.opsForValue().get("city1");
System.out.println("city1:"+city1);
}
【字符串操作并设置过期时间】
@Autowired
private StringRedisTemplate redisTemplate;
/**
*字符串操作设置过期时间
* TimeUnit是个枚举类型
*/
@Test
public void testRedis2() {
// 存储数据,并指定剩余生命时间,5小时
this.redisTemplate.opsForValue().set("city2", "上海",
5, TimeUnit.HOURS);
}
【hash操作】
/**
* Hash操作,boundHashOps绑定可以为hash
*/
@Test
public void testHash() {
BoundHashOperations<String, Object, Object> hashOps =
this.redisTemplate.boundHashOps("user:info");
// 操作hash数据
hashOps.put("name", "wzy");
hashOps.put("age", "12");
// 获取单个数据
Object name = hashOps.get("name");
System.out.println("name = " + name);
// 获取所有数据
Map<Object, Object> map = hashOps.entries();
for (Map.Entry<Object, Object> me : map.entrySet()) {
System.out.println(me.getKey() + " : " + me.getValue());
}
}