一.什么是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");
}
}