Redis--使用RedisTemplate操作數(shù)據(jù)庫

一.什么是Redis

Redis是一個(gè)非關(guān)系型數(shù)據(jù)庫另玖,具有很高的存取性能,一般用作緩存數(shù)據(jù)庫沸枯,減少正常存儲(chǔ)數(shù)據(jù)庫的壓力日矫。

Redis可以存儲(chǔ)鍵與5種不同數(shù)據(jù)結(jié)構(gòu)類型之間的映射赂弓,這5種數(shù)據(jù)結(jié)構(gòu)類型分別為String(字符串)绑榴、List(列表)、Set(集合)盈魁、Hash(散列)和 Zset(有序集合)翔怎。

二.RedisTemplate及其相關(guān)方法

1. RedisTemplate

Spring封裝了RedisTemplate對(duì)象來進(jìn)行對(duì)Redis的各種操作,它支持所有的Redis原生的api杨耙。RedisTemplate位于spring-data-redis包下赤套。RedisTemplate提供了redis各種操作、異常處理及序列化珊膜,支持發(fā)布訂閱容握,并對(duì)spring 3.1 cache進(jìn)行了實(shí)現(xiàn)。RedisTemplate提供了redis各種操作车柠、異常處理及序列化剔氏,支持發(fā)布訂閱,并對(duì)spring 3.1 cache進(jìn)行了實(shí)現(xiàn)竹祷。RedisTemplate提供了redis各種操作谈跛、異常處理及序列化,支持發(fā)布訂閱塑陵,并對(duì)spring 3.1 cache進(jìn)行了實(shí)現(xiàn)感憾。RedisTemplate提供了redis各種操作、異常處理及序列化令花,支持發(fā)布訂閱阻桅,并對(duì)spring 3.1 cache進(jìn)行了實(shí)現(xiàn)。

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

2.RedisTemplate中定義了對(duì)5種數(shù)據(jù)結(jié)構(gòu)操作
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

其實(shí)這里的ops相當(dāng)于options嫂沉, 是RedisTemplate對(duì)各種不同的Redis數(shù)據(jù)類型進(jìn)行操作。其實(shí)還有另外的方法:

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

三.RedisTemplate操作Redis數(shù)據(jù)庫的具體例子

1.值類型操作:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
public class TestValue {
    @Autowired
    private RedisTemplate redisTemplate;    
    @Test
    public void setValue(){
//存值俯抖,針對(duì)值類型输瓜,ops相當(dāng)于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("aaa");        
        redisTemplate.boundSetOps("nameset").add("bbb");    
        redisTemplate.boundSetOps("nameset").add("ccc");
    }
    
    /**
     * 提取值
     */
    @Test
    public void getValue(){
        Set members = redisTemplate.boundSetOps("nameset").members();
        System.out.println(members);
    }
    
    /**
     * 刪除集合中的某一個(gè)值
     */
    @Test
    public void deleteValue(){
        redisTemplate.boundSetOps("nameset").remove("ccc");
    }
    
    /**
     * 刪除整個(gè)集合
     */
    @Test
    public void deleteAllValue(){
        redisTemplate.delete("nameset");
    }
}

輸出結(jié)果:[aaa, bbb, ccc]

3.List類型操作

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

  • 右壓棧:
/**
     * 右壓棧:后添加的對(duì)象排在后邊搔啊,相當(dāng)于隊(duì)列,相當(dāng)于先進(jìn)先出
     */
    @Test
    public void testSetValue1(){        
        redisTemplate.boundListOps("namelist1").rightPush("aaa");
        redisTemplate.boundListOps("namelist1").rightPush("bbb");
        redisTemplate.boundListOps("namelist1").rightPush("ccc");       
    }
    
    /**
     * 顯示右壓棧集合,range 表示查詢的索引北戏,從第幾個(gè)查到第幾個(gè)负芋,如果想查詢所有的數(shù)的話只能將第二個(gè)數(shù)寫得大一點(diǎn)。
     */
    @Test
    public void testGetValue1(){
        List list = redisTemplate.boundListOps("namelist1").range(0, 10);
        System.out.println(list);
    }

運(yùn)行結(jié)果:aaa,bbb,ccc

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

運(yùn)行結(jié)果:ccc旧蛾,bbb,aaa

  • 根據(jù)索引查詢?cè)?/li>
/**
     * 查詢集合某個(gè)元素
     */
    @Test
    public void testSearchByIndex(){
        String s = (String) redisTemplate.boundListOps("namelist1").index(1);
        System.out.println(s);

}

運(yùn)行結(jié)果:返回索引為1的元素

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

表示移除名字為bbb的元素

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);
    }
 
    //    根據(jù)key獲取值
    @Test
    public void testGetValueByKey() {
        Object object = redisTemplate.boundHashOps("namehash").get("b");
        System.out.println(object);
    }
 
    //根據(jù)key移除值
    @Test
    public void testRemoveValueByKey() {
        redisTemplate.boundHashOps("namehash").delete("c");
    }
 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蠕嫁,一起剝皮案震驚了整個(gè)濱河市锨天,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剃毒,老刑警劉巖病袄,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赘阀,居然都是意外死亡益缠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門基公,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幅慌,“玉大人,你說我怎么就攤上這事轰豆∫任椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵秒咨,是天一觀的道長(zhǎng)喇辽。 經(jīng)常有香客問我,道長(zhǎng)雨席,這世上最難降的妖魔是什么菩咨? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮陡厘,結(jié)果婚禮上抽米,老公的妹妹穿的比我還像新娘。我一直安慰自己糙置,他們只是感情好云茸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谤饭,像睡著了一般标捺。 火紅的嫁衣襯著肌膚如雪懊纳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天亡容,我揣著相機(jī)與錄音嗤疯,去河邊找鬼。 笑死闺兢,一個(gè)胖子當(dāng)著我的面吹牛茂缚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屋谭,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脚囊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了桐磁?” 一聲冷哼從身側(cè)響起悔耘,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎所意,沒想到半個(gè)月后淮逊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扶踊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了郎任。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秧耗。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舶治,靈堂內(nèi)的尸體忽然破棺而出分井,到底是詐尸還是另有隱情,我是刑警寧澤霉猛,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布尺锚,位于F島的核電站,受9級(jí)特大地震影響惜浅,放射性物質(zhì)發(fā)生泄漏瘫辩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一坛悉、第九天 我趴在偏房一處隱蔽的房頂上張望伐厌。 院中可真熱鬧,春花似錦裸影、人聲如沸挣轨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卷扮。三九已至荡澎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晤锹,已是汗流浹背衔瓮。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抖甘,地道東北人热鞍。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像衔彻,于是被迫代替她去往敵國(guó)和親薇宠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容