一、概述
Spring Data Redis中提供了一个高度封装的类:RedisTemplate,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
具体分类如下:
ValueOperations:简单K-V操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:针对map类型的数据操作
ListOperations:针对list类型的数据操作
在Spring Boot项目中,可以使用Spring Data Redis来简化Redis操作
maven坐标:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二、用法
1、操作string类型数据
以string形式向redis添加数据:
redisTemplate.opsForValue().set("city","shanghai");
以string形式根据key去redis中拿value:
String city = (String) redisTemplate.opsForValue().get("city");
System.out.println(city); //shanghai
以string形式向redis添加数据,并设置过期时间:
redisTemplate.opsForValue().set("name","chendong",10l,TimeUnit.SECONDS);
向redis中添加不存在的数据,false代表此数据在redis中存在,添加失败:
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "shanghai");
System.out.println(aBoolean); //false
2、操作hash类型数据
以hash形式向redis添加数据:
redisTemplate.opsForHash().put("001","name", "chendong");
redisTemplate.opsForHash().put("001","age", "20");
redisTemplate.opsForHash().put("001","address", "shanghai");
以hash形式向redis取数据:
String name = (String) redisTemplate.opsForHash().get("001", "name");
System.out.println(name); //chendong
以hash形式获取"001"中的所有字段:
Set<String> keys = redisTemplate.opsForHash().keys("001");
for (Object key : keys) {
System.out.print(key+" ");
} //name age address
以hash形式获取"001"中的所有值:
List<String> values = redisTemplate.opsForHash().values("001");
for (Object value : values) {
System.out.print(value+" ");
} //chendong 20 shanghai
3、操作List类型数据
以List形式向redis添加数据:
redisTemplate.opsForList().leftPush("mylist","a"); //存一个
redisTemplate.opsForList().leftPushAll("mylist","b","c","d"); //存多个
以List形式向redis取数据:
List<String> mylist = redisTemplate.opsForList().range("mylist", 0, -1);
for (String value : mylist) {
System.out.print(value+" ");
} //d c b a
以List形式获取列表长度:
int myListValeSize = redisTemplate.opsForList().size("mylist").intValue();
以List形式向redis清数据(此循环结束后mylist就变空了):
for (int i = 0; i < myListValeSize; i++) {
//出队列
String element = (String) redisTemplate.opsForList().rightPop("mylist");
System.out.print(element+" ");
} //a b c d
4、操作Set类型数据
以Set形式向redis添加数据:
redisTemplate.opsForSet().add("myset","a","b","c","d");
以Set形式向redis取数据:
Set<String> myset = redisTemplate.opsForSet().members("myset");
for (String s : myset) {
System.out.print(s+" ");
} //a d c b
以Set形式删除myset成员:
redisTemplate.opsForSet().remove("myset","a","b");
5、操作Zset类型数据
以Zset形式向redis添加数据:
redisTemplate.opsForZSet().add("myZset","a",4.0);
redisTemplate.opsForZSet().add("myZset","b",3.0);
redisTemplate.opsForZSet().add("myZset","c",2.0);
redisTemplate.opsForZSet().add("myZset","d",1.0);
以Zset形式向redis取数据:
Set<String> myZset = redisTemplate.opsForZSet().range("myZset", 0, -1);
for (String s : myZset) {
System.out.print(s+" ");
} //d c b a
以Zset形式修改分数:
redisTemplate.opsForZSet().incrementScore("myZset","d",5.0);
以Zset形式删除成员:
redisTemplate.opsForZSet().remove("myZset","a","b");
6、通用操作,redis五大数据类型都可以操作
获取redis中所有的key:
Set<String> keys = redisTemplate.keys("*");
for (String key : keys) {
System.out.print(key+" ");
} //myZset
获取指定key对应的value的数据类型:
DataType myZsetDataType = redisTemplate.type("myZset");
System.out.println(myZsetDataType); //ZSET
判断某个key是否存在:
Boolean myZset = redisTemplate.hasKey("myZset");
System.out.println(myZset); //true
删除指定key:
Boolean myZsetDelete = redisTemplate.delete("myZset");
System.out.println(myZsetDelete); //true
三、案例
百度网盘链接:
https://pan.baidu.com/s/1ca97kJc1fsosUg_4VqhfsA
提取码:
1234