SpringDataRedis基礎(2):StringRedisTemplate操作
阿新 • • 發佈:2018-11-27
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());
}
}