亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

spring使用RedisTemplate操作Redis數據庫

 更新時間:2021年03月24日 14:45:17   作者:striveb  
這篇文章主要介紹了spring使用RedisTemplate操作Redis數據庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一.什么是Redis

Redis是一個非關系型數據庫,具有很高的存取性能,一般用作緩存數據庫,減少正常存儲數據庫的壓力。

Redis可以存儲鍵與5種不同數據結構類型之間的映射,這5種數據結構類型分別為String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

下面來對這5種數據結構類型作簡單的介紹:

二.RedisTemplate及其相關方法

1.RedisTemplate

Spring封裝了RedisTemplate對象來進行對Redis的各種操作,它支持所有的Redis原生的api。RedisTemplate位于spring-data-redis包下。RedisTemplate提供了redis各種操作、異常處理及序列化,支持發(fā)布訂閱,并對spring 3.1 cache進行了實現。RedisTemplate提供了redis各種操作、異常處理及序列化,支持發(fā)布訂閱,并對spring 3.1 cache進行了實現。RedisTemplate提供了redis各種操作、異常處理及序列化,支持發(fā)布訂閱,并對spring 3.1 cache進行了實現。RedisTemplate提供了redis各種操作、異常處理及序列化,支持發(fā)布訂閱,并對spring 3.1 cache進行了實現。

注意 RedisTemplate是一個key和value都是泛型的模板類,一般情況下key為String類型,如:RedisTemplate<String,Object>。

此外,如果沒特殊情況,切勿定義成RedisTemplate<Object, Object>,否則根據里氏替換原則,使用的時候會造成類型錯誤 。

spring-data-redis針對jedis提供了如下功能:
           1.連接池自動管理,提供了一個高度封裝的“RedisTemplate”類
           2.針對jedis客戶端中大量api進行了歸類封裝,將同一類型操作封裝為operation接口
           ValueOperations:簡單K-V操作
           SetOperations:set類型數據操作
           ZSetOperations:zset類型數據操作
           HashOperations:針對map類型的數據操作
           ListOperations:針對list類型的數據操作

2.RedisTemplate中定義了對5種數據結構操作

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

其實這里的ops相當于options, 是RedisTemplate對各種不同的Redis數據類型進行操作。其實還有另外的方法:

redistempalate.boundValueOps
redistempalate.boundSetOps
redistempalate.boundListOps
redistempalate.boundHashOps
redistempalate.boundZSetOps

opsForXXX和boundXXXOps的區(qū)別?

XXX為value的類型,前者獲取一個operator,但是沒有指定操作的對象(key),可以在一個連接(事務)內操作多個key以及對應的value;后者獲取了一個指定操作對象(key)的operator,在一個連接(事務)內只能操作這個key對應的value。

關于計數的API(increment)有一個bug,需要各位使用中注意,通過increment計數以后,通過get方式獲取計數值的時候可能會拋出EOF異常(和本地的jdk以及redis的編譯版本有關),可以考慮使用boundValueOps(key).get(0,-1)獲取計數值。

三.RedisTemplate操作Redis數據庫的具體例子

1.值類型操作:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
public class TestValue {
	@Autowired
	private RedisTemplate redisTemplate;	
	@Test
	public void setValue(){
//存值,針對值類型,ops相當于options
		redisTemplate.boundValueOps("name").set("itcast");		
	}	
	@Test
	public void getValue(){
		String str = (String) redisTemplate.boundValueOps("name").get();
		System.out.println(str);
	}	
	@Test
	public void deleteValue(){
		redisTemplate.delete("name");
	}	
}

2.集合類型操作之Set類型,無序,即存取順序不一定相同

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
public class TestSet {
	
	@Autowired
	private RedisTemplate redisTemplate;
	
	/**
	 * 存入值
	 */
	@Test
	public void setValue(){
		redisTemplate.boundSetOps("nameset").add("曹操");		
		redisTemplate.boundSetOps("nameset").add("劉備");	
		redisTemplate.boundSetOps("nameset").add("孫權");
	}
	
	/**
	 * 提取值
	 */
	@Test
	public void getValue(){
		Set members = redisTemplate.boundSetOps("nameset").members();
		System.out.println(members);
	}
	
	/**
	 * 刪除集合中的某一個值
	 */
	@Test
	public void deleteValue(){
		redisTemplate.boundSetOps("nameset").remove("孫權");
	}
	
	/**
	 * 刪除整個集合
	 */
	@Test
	public void deleteAllValue(){
		redisTemplate.delete("nameset");
	}
}

輸出結果:[孫權, 劉備, 曹操],此外,set類型的元素也不可重復。當set沒有值的時候,會返回一個[]

3.List類型操作

list類型分為兩種,一種是左壓棧,一種是右壓棧

右壓棧:

	/**
	 * 右壓棧:后添加的對象排在后邊,相當于隊列,相當于先進先出
	 */
	@Test
	public void testSetValue1(){		
		redisTemplate.boundListOps("namelist1").rightPush("劉備");
		redisTemplate.boundListOps("namelist1").rightPush("關羽");
		redisTemplate.boundListOps("namelist1").rightPush("張飛");		
	}
	
	/**
	 * 顯示右壓棧集合,range 表示查詢的索引,從第幾個查到第幾個,如果想查詢所有的數的話只能將第二個數寫得大一點。
	 */
	@Test
	public void testGetValue1(){
		List list = redisTemplate.boundListOps("namelist1").range(0, 10);
		System.out.println(list);
	}

運行結果:[劉備, 關羽, 張飛],元素可以重復

左壓棧:

	/**
	 * 左壓棧:后添加的對象排在前邊,相當于棧,先進后出
	 */
	@Test
	public void testSetValue2(){		
		redisTemplate.boundListOps("namelist2").leftPush("劉備");
		redisTemplate.boundListOps("namelist2").leftPush("關羽");
		redisTemplate.boundListOps("namelist2").leftPush("張飛");		
	}
	
	/**
	 * 顯示左壓棧集合
	 */
	@Test
	public void testGetValue2(){
		List list = redisTemplate.boundListOps("namelist2").range(0, 10);
		System.out.println(list);
	}

運行結果:[張飛, 關羽, 劉備]

根據索引查詢元素

	/**
	 * 查詢集合某個元素
	 */
	@Test
	public void testSearchByIndex(){
		String s = (String) redisTemplate.boundListOps("namelist1").index(1);
		System.out.println(s);
	}

運行結果:返回索引為1的元素移除某個元素的值

	/**
	 * 移除集合某個元素,其中remove中第一個參數是移除的個數
	 */
	@Test
	public void testRemoveByIndex(){
		redisTemplate.boundListOps("namelist1").remove(1, "關羽");
	}

這里表示移除一個“關羽”。 

4.Hash類型操作

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/applicationContext-redis.xml")
public class TestHash {
  @Autowired
  private RedisTemplate redisTemplate;
 
  //  存值
  @Test
  public void testSetValue() {
    redisTemplate.boundHashOps("namehash").put("a", "唐僧");
    redisTemplate.boundHashOps("namehash").put("b", "悟空");
    redisTemplate.boundHashOps("namehash").put("c", "八戒");
    redisTemplate.boundHashOps("namehash").put("d", "沙僧");
  }
 
  //獲取所有的key
  @Test
  public void testGetKeys() {
    Set s = redisTemplate.boundHashOps("namehash").keys();
    System.out.println(s);
  }
 
  //  獲取所有的value
  @Test
  public void testGetValues() {
    List values = redisTemplate.boundHashOps("namehash").values();
    System.out.println(values);
  }
 
  //  根據key獲取值
  @Test
  public void testGetValueByKey() {
    Object object = redisTemplate.boundHashOps("namehash").get("b");
    System.out.println(object);
  }
 
  //根據key移除值
  @Test
  public void testRemoveValueByKey() {
    redisTemplate.boundHashOps("namehash").delete("c");
  }
 
}

四.RedisTemplate和StringRedisTemplate的區(qū)別

1. 兩者的關系是StringRedisTemplate繼承RedisTemplate。

2. 兩者的數據是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate里面的數據,RedisTemplate只能管理RedisTemplate中的數據。

3. SDR默認采用的序列化策略有兩種,一種是String的序列化策略,一種是JDK的序列化策略。

StringRedisTemplate默認采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate默認采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate使用的序列類在在操作數據的時候,比如說存入數據會將數據先序列化成字節(jié)數組然后在存入Redis數據庫,這個時候打開Redis查看的時候,你會看到你的數據不是以可讀的形式展現的,而是以字節(jié)數組顯示,類似下面

當然從Redis獲取數據的時候也會默認將數據當做字節(jié)數組轉化,這樣就會導致一個問題,當需要獲取的數據不是以字節(jié)數組存在redis當中而是正常的可讀的字符串的時候,比如說下面這種形式的數據

相關連接:https://www.cnblogs.com/EasonJim/p/7803067.html

到此這篇關于spring使用RedisTemplate操作Redis數據庫的文章就介紹到這了,更多相關spring使用RedisTemplate操作Redis內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于Spring?Cache實現Caffeine+Redis二級緩存

    基于Spring?Cache實現Caffeine+Redis二級緩存

    本文主要介紹了基于Spring?Cache實現Caffeine+Redis二級緩存,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java實現解析JSON大文件JsonReader工具詳解

    Java實現解析JSON大文件JsonReader工具詳解

    這篇文章主要介紹了Java實現解析JSON大文件的工具JsonReader使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • Java根據模板實現excel導出標準化

    Java根據模板實現excel導出標準化

    這篇文章主要為大家詳細介紹了Java如何根據模板實現excel導出標準化,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-03-03
  • Java基礎入門總結之序列化和反序列化

    Java基礎入門總結之序列化和反序列化

    序列化是一種對象持久化的手段,普遍應用在網絡傳輸、RMI等場景中,下面這篇文章主要給大家介紹了關于Java基礎入門總結之序列化和反序列化的相關資料,需要的朋友可以參考下
    2022-02-02
  • Selenium處理select標簽的下拉框

    Selenium處理select標簽的下拉框

    Selenium是一個開源的和便攜式的自動化軟件測試工具,用于測試Web應用程序有能力在不同的瀏覽器和操作系統運行。接下來通過本文給大家介紹Selenium處理select標簽的下拉框,需要的朋友一起學習吧
    2016-04-04
  • java中enum的用法

    java中enum的用法

    這篇文章主要介紹了java中enum的用法,包括了枚舉類型的基本定義及用法分析,對于學習Java有著一定的學習與借鑒價值,需要的朋友可以參考下
    2014-11-11
  • java?MongoDB實現列表分頁查詢的示例代碼

    java?MongoDB實現列表分頁查詢的示例代碼

    本文主要介紹了java?MongoDB實現列表分頁查詢的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • rocketmq client 日志的問題處理方式

    rocketmq client 日志的問題處理方式

    這篇文章主要介紹了rocketmq client 日志的問題處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java調用Pytorch實現以圖搜圖功能

    Java調用Pytorch實現以圖搜圖功能

    這篇文章主要為大家詳細介紹了Java如何調用Pytorch實現以圖搜圖功能,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-06-06
  • JavaWeb 實現驗證碼功能(demo)

    JavaWeb 實現驗證碼功能(demo)

    在 WEB-APP 中一般應用于:登錄、注冊、買某票、秒殺等場景,大家都接觸過這個驗證碼操作,今天小編通過實例代碼給大家講解javaweb實現驗證碼功能,需要的朋友參考下
    2017-02-02

最新評論