1. 程式人生 > >SpringDataRedis基礎(2):StringRedisTemplate操作

SpringDataRedis基礎(2):StringRedisTemplate操作

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());
        }
    }