1. 程式人生 > >spring-boot-starter-data-redis(spring cloud 操作redis) RedisTemplate

spring-boot-starter-data-redis(spring cloud 操作redis) RedisTemplate

入門:

引入依賴:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

yml配置檔案:     

spring:    
    redis:
        database: 0
        host: 139.107.71.246
        port: 6379
        password:     # 密碼(預設為空)
        timeout: 6000  # 連線超時時長(毫秒)
        pool:
            max-active: 1000  # 連線池最大連線數(使用負值表示沒有限制)
            max-wait: -1      # 連線池最大阻塞等待時間(使用負值表示沒有限制)
            max-idle: 10      # 連線池中的最大空閒連線
            min-idle: 5       # 連線池中的最小空閒連線 

加入 data redis 配置檔案:

package io.sr.modules.biz.sys.conf;

import java.net.UnknownHostException;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;


/**  
* @Description: Redis配置檔案
* @author 劉彥青  
* @date 2018年3月1日   
*/
@Configuration
public class RedisConfiguration {

	@Bean
	@ConditionalOnMissingBean(name="redisTemplate")
	public RedisTemplate<Object, Object> redisTemplate(
			RedisConnectionFactory redisConnectionFactory) 
					throws UnknownHostException{
		RedisTemplate<Object, Object> template = new RedisTemplate<Object,Object>();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}
	
	@Bean
	@ConditionalOnMissingBean(StringRedisTemplate.class)
	public StringRedisTemplate stringRedisTemplate(
			RedisConnectionFactory redisConnectionFactory) 
					throws UnknownHostException{
		StringRedisTemplate template = new StringRedisTemplate();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}
}

      使用:

RedisTemplate中定義了對5種資料結構操作


redisTemplate.opsForValue();//操作字串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
public class RedisUtils {
	@Autowired
    private StringRedisTemplate template;

    public  void setKey(String key,String value){
        ValueOperations<String, String> ops = template.opsForValue();
        ops.set(key,value);
    }

    public String getValue(String key){
        ValueOperations<String, String> ops = this.template.opsForValue();
        return ops.get(key);
    }

常用的一些操作:

template.opsForValue().set("key", "100",60*10,TimeUnit.SECONDS);//向redis裡存入資料和設定快取時間  

template.boundValueOps("key").increment(-1);//val做-1操作  

template.opsForValue().get("key")//根據key獲取快取中的val  

template.boundValueOps("key").increment(1);//val +1  

template.getExpire("key")//根據key獲取過期時間  

template.getExpire("key",TimeUnit.SECONDS)//根據key獲取過期時間並換算成指定單位  

template.delete("key");//根據key刪除快取  

template.hasKey("546545");//檢查key是否存在,返回boolean值  

template.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合  

template.expire("red_123",1000 , TimeUnit.MILLISECONDS);//設定過期時間  

template.opsForSet().isMember("red_123", "1")//根據key檢視集合中是否存在指定資料  

template.opsForSet().members("red_123");//根據key獲取set集合  

常用API

Redis的String資料結構 (推薦使用StringRedisTemplate)

  • set void set(K key, V value);

        set void set(K key, V value, long timeout, TimeUnit unit)

  • set void set(K key, V value, long offset);
    該方法是用 value 引數覆寫(overwrite)給定 key 所儲存的字串值,從偏移量 offset 開始
  • setIfAbsent Boolean setIfAbsent(K key, V value);
  • multiSet void multiSet(Map<? extends K, ? extends V> m);
    為多個鍵分別設定它們的值
  • multiSetIfAbsent Boolean multiSetIfAbsent(Map<? extends K, ? extends V> m);
    為多個鍵分別設定它們的值,如果存在則返回false,不存在返回true
  • get V get(Object key);
  • getAndSet V getAndSet(K key, V value);
    設定鍵的字串值並返回其舊值
  • multiGet List<V> multiGet(Collection<K> keys);
    為多個鍵分別取出它們的值
  • increment Long increment(K key, long delta); 
    自增   支援整數,  當key已經存在時,這個可以實現自增或自減, value值等於舊值+delta
  • increment Double increment(K key, double delta);
    也支援浮點數
  • append Integer append(K key, String value);
    如果key已經存在並且是一個字串,則該命令將該值追加到字串的末尾。如果鍵不存在,則它被建立並設定為空字串,因此APPEND在這種特殊情況下將類似於SET。
  • get String get(K key, long start, long end);
    擷取key所對應的value字串
  • size Long size(K key);
    返回key所對應的value值得長度
  • setBit Boolean setBit(K key, long offset, boolean value);
    對 key 所儲存的字串值,設定或清除指定偏移量上的位(bit)
    key鍵對應的值value對應的ascii碼,在offset的位置(從左向右數)變為value
  • getBit Boolean getBit(K key, long offset);
    獲取鍵對應值的ascii碼的在offset處位值

redis 釋出與訂閱  : https://zhuanlan.zhihu.com/p/20948779

詳細用法:https://www.jianshu.com/p/7bf5dc61ca06