redisTemplate

发布时间 2023-04-20 11:44:54作者: 何苦->

RedisTemplate

1. RedisTemplate中定义了对5种数据结构操作

redisTemplate.opsForValue(); // 操作字符串
redisTemplate.opsForHash(); // 操作hash
redisTemplate.opsForList(); // 操作list
redisTemplate.opsForSet(); // 操作set
redisTemplate.opsForZset(); // 操作zset

除了上面的方法,还有另外的方法:

redistempalate.boundValueOps     // 操作字符串
redistempalate.boundHashOps     // 操作hash
redistempalate.boundListOps     // 操作list
redistempalate.boundSetOps      // 操作set   
redistempalate.boundZSetOps     // 操作zset

PS:opsForXXX和boundXXXOps的区别

XXX为value的类型,opsForXXX获取一个operator,但是没有指定操作的对象(key),可以在一个连接(事务)内操作多个key以及对应的value;

boundXXXOps获取了一个指定操作对象(key)的operator,在一个连接(事务)内只能操作这个key对应的value。

2. opsForXXX方法的操作

1. String类型相关操作

通过opsForValue()方法下的api操作redis的String类型,String结构类型为(key,value)类型

1. set(K key, Vvalue);

方法功能:赋值,赋值相应key,添加value值

示列:

redisTemplate.opsForValue().set("key1", "value1");
String value1= (String) redisTemplate.opsForValue().get("key1");
System.out.println(value1);

运行结果为:value1

2. get(K key);

方法功能: 取值,获取相应key的value值

示列:

redisTemplate.opsForValue().set("key1", "value1");
String value1= (String) redisTemplate.opsForValue().get("key1");
System.out.println(value1);

运行结果为:value1

3. set(K key, V value, long time, TimeUnit.SECONDS);

方法功能:赋值,赋值相应key,添加value值并设置过期时间

示列:

redisTemplate.opsForValue().set("key2", "value2", 10, TimeUnit.SECONDS);
System.out.println(redisTemplate.opsForValue().get("key2"));

运行结果为:value2

PS:10秒后此key和value值过期,无效

4. setIfAbsent(K key, V value);

方法功能: 赋值,若key不存在,才设值,如存在,此方法无效;

示列:

redisTemplate.opsForValue().set("key1", "value1");
redisTemplate.opsForValue().setIfAbsent("key1", "value3");
redisTemplate.opsForValue().setIfAbsent("key3", "value3");
String value3= (String) redisTemplate.opsForValue().get("key1");
String value4= (String) redisTemplate.opsForValue().get("key3");
System.out.println("key存在情况:"+value3+" "+"key不存在情况:"+value4);

运行结果为:key存在情况:value1 key不存在情况:value3

5. multiSet(Map<? extends K, ? extends V> map);

方法功能: 赋值,批量赋值,通过map集合进行调用

示列:

Map<String, String> map1 = new HashMap<String, String>();
map1.put("k1", "v1");
map1.put("k2", "v2");
map1.put("k3", "v3");
redisTemplate.opsForValue().multiSet(map1);

String value1= (String) redisTemplate.opsForValue().get("k1");
String value2= (String) redisTemplate.opsForValue().get("k2");
String value3= (String) redisTemplate.opsForValue().get("k3");
System.out.print(value1);
System.out.print(value2);
System.out.print(value3);

运行结果为:v1 v2 v3

6. multiGet(K key);

方法功能:取值,批量取值,通过list集合调用取值

示范:

Map<String, String> map1 = new HashMap<String, String>();
map1.put("k1", "v1");
map1.put("k2", "v2");
map1.put("k3", "v3");
redisTemplate.opsForValue().multiSet(map1);

//批量取值
List<String> keys = new ArrayList<String>();
keys.add("k1");
keys.add("k2");
keys.add("k3");

List<Object> value5 = redisTemplate.opsForValue().multiGet(keys);
System.out.println(value5);

运行结果为:[v1, v2, v3]

2.哈希类型(Hash结构)相关操作

通过opsForHash()方法下的api操作redis的Hash类型,Hash结构类型为(key1,(key2,value))类型,key1为大key,(key2,value2)为大value,key2为小key,value2为小value,相当于(key,map)结构

1. put(H key1, HK key2, V value);

方法功能:赋值,把key1当做大key,key2当做小key,value做为value值

示列:

redisTemplate.opsForHash().put("key1", "key2", "value");
String value = (String) redisTemplate.opsForHash().get("key1","key2");
System.out.println(value);

运行结果为:value

2. get(H key1, HK key2);

方法功能:取值,获取指定大key的集合指定小key的值

示列:

redisTemplate.opsForHash().put("key1", "key2", "value");
String value = (String) redisTemplate.opsForHash().get("key1","key2");
System.out.println(value);

运行结果为:value

3.delete(H key1, HK key2);

方法功能:删除,删除对应的key2及其value

示列:

redisTemplate.opsForHash().delete("k1", "name");

运行结果:把redis后台的名为name的小key及其value删除

4. keys(K key);

方法功能:参数key为大key,取值,获取指定大key的集合所有小key

示列:

redisTemplate.opsForHash().put("key1", "key2", "value1");
redisTemplate.opsForHash().put("key1", "key3", "value2");
redisTemplate.opsForHash().put("key1", "key4", "value3");
Set<Object> value= redisTemplate.opsForHash().keys("key1");
System.out.println(value);

运行结果为:[key4, key3,key2]

5. values(K key);

方法功能:参数key为大key,取值,获取指定大key的所有值

示列:

redisTemplate.opsForHash().put("key1", "key2", "value1");
redisTemplate.opsForHash().put("key1", "key3", "value2");
redisTemplate.opsForHash().put("key1", "key4", "value3");
List<Object> list = redisTemplate.opsForHash().values("key1");
System.out.println(list);

运行结果为:[value1, value2,value3]

6. entries(K key);

方法功能:参数key为大key,取值,获取指定大key的所有键值对

示列:

redisTemplate.opsForHash().put("key1", "key2", "value2");
redisTemplate.opsForHash().put("key1", "key3", "value3");
redisTemplate.opsForHash().put("key1", "key4", "value4");

Map<Object, Object> resultMap= redisTemplate.opsForHash().entries("key11");
System.out.println(resultMap);

运行结果为:{key2=value2, key3=value3, key4=value4}

7. hasKey(H key1, HK key2);

方法功能:判断,判断大key里面是否有这个小key,如有则返回true,没有则返回false

示列:

redisTemplate.opsForHash().put("key1", "key2", "value2");
Boolean a =redisTemplate.opsForHash().hasKey("kk", "key1");
Boolean b =redisTemplate.opsForHash().hasKey("key1", "key1");

System.out.println(a);
System.out.println(b);

运行结果为:false true

8. putAll(K key1,Map<? extends HK, ? extends HV> map);

方法功能:赋值,把map集合保存在命名为map的大key上,其中map为大key,map集合为value

Map<String,String> map=new HashMap<String,String>();
map1.put("key1","value1");
map1.put("key2","value2");
map1.put("key3","value3");
map1.put("key4","value4");
map1.put("key5","value5");

redisTemplate.opsForHash().putAll("map",map);

Map<Object, Object> resultMap= redisTemplate.opsForHash().entries("map");
System.out.println(resultMap);

运行结果为:{key1=value1, key2=value2, key5=value5, key3=value3, key4=value4}

9. multiGet(K key, keys);

方法功能: 取值,根据大key和多个小key找出对应的多个值

示列:

Map<String,String> map=new HashMap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
map.put("key4","value4");
map.put("key5","value5");

redisTemplate.opsForHash().putAll("map",map);

Collection<Object> keys = new ArrayList<>();
keys.add("key1");
keys.add("key2");
keys.add("key3");

List<Object> resultList =redisTemplate.opsForHash().multiGet("map", keys);
System.out.println(resultList);

运行结果为:[value1, value2, value3]

3. List类型相关操作

通过opsForList()方法下的api操作redis的List类型,Hash结构类型为(key1,List)类型

1. leftPush(K key, V value);

方法功能:赋值,向集合左边添加元素值

示列:

redisTemplate.opsForList().leftPush("listkey1","value1");
// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:[value1]

2. range(K key, long start, long end);

方法功能:获取指定区间的值

redisTemplate.opsForList().leftPush("listkey1","value1");
// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:[value1]

3. set(K key, long index, V value);

方法功能:赋值,在集合的指定位置插入元素,如果指定位置已有元素,则覆盖,没有则新增

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().set("listkey1",2,"value3");

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value1, value2, value6, value2, value2]

[value1, value2, value3, value2, value2]

4. rightPush(K key, V value) ;

方法功能:赋值,向集合最右边添加元素

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().rightPush("listkey1","value4") ;

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value3]

[value3, value4]

5. remove(K key, long count, Object value);

方法功能:删除,删除指定key,指定范围的元素;

count> 0:删除等于从左到右移动的值的第一个元素;
count< 0:删除等于从右到左移动的值的第一个元素;
count = 0:删除等于value的所有元素。

示列:

redisTemplate.opsForList().remove("listkey1",0,"value1");

运行结果为:删除掉redis后台listkey1为key的所有value1的值

6. leftPop(K key);

方法功能:移除指定key的的左边第一个元素值。

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().leftPop("listkey1") ;

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value3, value4]

[value4]

7. rightPop(K key);

方法功能:移除指定key的的右边第一个元素值

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().rightPop("listkey1") ;

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value3, value4]

[value3]

8. index(K key, long index);

方法功能:获取指定key的指定位置的值

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
System.out.println(redisTemplate.opsForList().index("listkey1",1));

运行结果为:

[value3, value4, value5]
value4

9. trim(K key, long start, long end);

方法功能:截取集合元素长度,保留长度内的数据

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().trim("listkey1", 1, 3);

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value1, value2, value3, value4, value5]

[value2, value3, value4]

10. leftPushAll(K key, V… values);

方法功能:指定key,向左边批量添加参数元素

示列:

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().leftPushAll("listkey1", "value3","value4","value5");

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value1, value2][value5, value4, value3, value1, value2]

11. rightPushAll(K key, V… values);

方法功能:指定key,向右边批量添加参数元素

List<Object> resultList2 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList2);
redisTemplate.opsForList().rightPushAll("listkey1", "value3","value4","value5");

// end 参数为-1为打印全部
List<Object> resultList1 = redisTemplate.opsForList().range("listkey1",0,-1);
System.out.println(resultList1);

运行结果为:

[value1, value2]

[value1, value2, value3, value4, value5]

4.Set类型相关操作

通过opsForSet()方法下的api操作redis的Set类型,Set结构类型为(key1,Set)类型

1. add(K key, V… value);

方法功能:向指定key中添加元素

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

[value1, value4, value2, value3, value5]

2.opsForSet().members(K key);

方法功能:获取指定key的set集合

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

[value1, value4, value2, value3, value5]

3. members(K key);

方法功能:删除指定key及其value值

示列:

redisTemplate.opsForSet().remove("keySet1");

运行结果为:删除redis后台的指定key的set集合及其key

4. remove(K key, Object… value);

方法功能:删除指定key的value值

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
redisTemplate.opsForSet().remove("keySet1", "value1","value2");
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

[value4, value3, value5]

5. pop(K key);

方法功能:从集合中随机删除一个元素,并返回该元素

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
System.out.println(redisTemplate.opsForSet().pop("keySet1"));
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

value5
[value1, value2, value3, value4]

6. isMember(K key,Object value);

方法功能:判断指定key的元素值中是否存在某元素

示列:

redisTemplate.opsForSet().add("keySet1","value1","value2","value3","value4","value5");
System.out.println(redisTemplate.opsForSet().isMember("keySet1","value1"));
//获取所有成员
Set<Object> value1= redisTemplate.opsForSet().members("keySet1");
System.out.println(value1);

运行结果为:

true
[value1, value2, value4, value3, value5]

5. ZSet类型相关操作

通过opsForZset()方法下的api操作redis的ZSet类型,Set结构类型为(key1,Set)类型,与set类型不同的是,在set的基础上增加了一个顺序属性,这一属性在添加时可以指定,每次指定后,zset会自动重新按新的值调整顺序

1. add(K key, V value, double score);

方法功能:新增一个有序集合,存在的话为false,不存在的话为true,参数score为排序的参照,参数score越大,越小插入,越靠近右边

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 3);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2);

Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

运行结果为:[value2, value1]

2. range(K key, long start, long end);

方法功能:获取指定区间的值

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 3);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2);

Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

运行结果为:[value2, value1]

3. remove(K key,V value);

方法功能:删除指定key的指定元素

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);

//从集合中删除指定元素
redisTemplate.opsForZSet().remove("ZSetKey1", "value2");

Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

运行结果为:[value1, value3, value4]

4. incrementScore(K key,V value, 5,double score);

方法功能:给指定key的指定值加分,使其排名靠前

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);

//为指定元素加分
Double score = redisTemplate.opsForZSet().incrementScore("ZSetKey1", "value1", 5);
System.out.println(score);//返回加分后的得分

Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

运行结果为:[value2, value3, value4, value1]

5. score(K key,V value);

方法功能:获取指定key的指定值的分数

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);

//获得指定元素的分数
Double score = redisTemplate.opsForZSet().score("ZSetKey1", "value3");
System.out.println(score);

运行结果为:3.0

6. count(K key, double start, double end);

方法功能:返回指定key的集合内指定分数范围的成员个数

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);

//返回集合内指定分数范围的成员个数
Long count = redisTemplate.opsForZSet().count("ZSetKey1", 1, 3);
System.out.println(count);

运行结果为:3

7. removeRangeByScore(K key, double start, double end);

方法功能:删除指定key指定分数范围内的元素

示列:

redisTemplate.opsForZSet().add("ZSetKey1", "value1", 1.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value2", 2.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value3", 3.0);
redisTemplate.opsForZSet().add("ZSetKey1", "value4", 4.0);


Set<Object> range = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range);

redisTemplate.opsForZSet().removeRangeByScore("ZSetKey1", 2, 4);
Set<Object> range1 = redisTemplate.opsForZSet().range("ZSetKey1", 0, -1);
// 按照数字大小来从大到小排序,大的在右边
System.out.println(range1);

运行结果为:

[value1, value2, value3, value4]

[value1]