这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。
1、添加依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.5</version>
</dependency>
2、添加配置文件
spring:
redis:
database: 0
host: localhost
port: 6379
password:
jedis:
pool:
#最大连接数
max-active: 100
#最大阻塞等待时间(负数表示没限制)
max-wait: -1
#最大空闲
max-idle: 8
#最小空闲
min-idle: 0
#连接超时时间
timeout: 10000
cache:
redis:
#存活时间
time-to-live: 360000000
3、RedisTemplate的使用
3.1、注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
3.2、String数据结构
set存值
redisTemplate.opsForValue().set("one","one");//添加键key值value
set存有过期时间的值
redisTemplate.opsForValue().set("two","two",10, TimeUnit.SECONDS);//添加键key值value,并设置10秒的过期时间,10秒之内查询有返回结果,10秒之后查询返回为null
get获取key值
redisTemplate.opsForValue().get("two");//获取key为two的value值
返回key所对应的value值的长度
redisTemplate.opsForValue().size("one");
删除指定key(五种类型都通用的方法)
redisTemplate.delete("one");
如果key不存在则创建并赋予过期时间
redisTemplate.opsForValue().setIfAbsent("five", "five", 10, TimeUnit.SECONDS);
3.3、List数据结构
从左添加所有的list集合数据
List<String> strings = new ArrayList<>();
strings.add("1");
strings.add("2");
strings.add("3");
redisTemplate.opsForList().leftPushAll("list",strings);
查询list列表中所有的值
redisTemplate.opsForList().range("list", 0, -1);
从右添加所有的list集合数据
List<String> strings = new ArrayList<>();
strings.add("1");
strings.add("2");
strings.add("3");
redisTemplate.opsForList().rightPushAll("list",strings);
从左添加指定值到key 为list集合数据
redisTemplate.opsForList().leftPush("list","1");
redisTemplate.opsForList().leftPush("list","2");
redisTemplate.opsForList().leftPush("list","3");
返回存储在键中的列表的长度。如果键不存在,则将其解释为空列表,并返回0。当key存储的值不是列表时返回错误。
redisTemplate.opsForList().size("list");
给list集合赋予过期时间(五种类型都通用的方法)
redisTemplate.expire("list",10, TimeUnit.SECONDS);
3.4、Set数据结构
添加set集合无序不可重复的数据
redisTemplate.opsForSet().add("six","six1","six2","six3","six4");
或
String[] strs= new String[]{"six1","six2"};
redisTemplate.opsForSet().add("six",strs);
根据key获取集合中所有的值
redisTemplate.opsForSet().members("six");
判断set集合中是否包含指定值
redisTemplate.opsForSet().isMember("six","six2");
返回指定集合key长度
redisTemplate.opsForSet().size("six");
删除指定key 的指定值
redisTemplate.opsForSet().remove("six", "six4", "six1");
或
String[] strs = new String[]{"str1","str2"};
System.out.println(template.opsForSet().remove("six",strs));
3.5、Hash数据结构
添加单条数据
redisTemplate.opsForHash().put("nine","nine1","100");
查询hash集合中指定key的值
redisTemplate.opsForHash().get("nine", "nine1");
批量添加数据
Map<String, String> stringStringHashMap = new HashMap<>();
stringStringHashMap.put("map1","23");
stringStringHashMap.put("map2","26");
stringStringHashMap.put("map3","32");
redisTemplate.opsForHash().putAll("nine",stringStringHashMap);
提取集合所有的keys
redisTemplate.opsForHash().keys("nine");
提取集合所有的values
redisTemplate.opsForHash().values("nine");
获取所有的键值对集合
redisTemplate.opsForHash().entries("nine");
判断Hash中是否含有该值
redisTemplate.opsForHash().hasKey("nine", "map1");
判断是否有该key(五种类型都通用的方法)
redisTemplate.hasKey("nine");
删除hash中指定key
redisTemplate.opsForHash().delete("nine", "map1");
3.6、Zset数据结构
集合中添加单条数据,给定分数
redisTemplate.opsForZSet().add("ten", "ten1", 1.2);
集合中批量添加数据
ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<>("ten2",98.5);
ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple<>("ten3",93.2);
Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<ZSetOperations.TypedTuple<Object>>();
tuples.add(objectTypedTuple1);
tuples.add(objectTypedTuple2);
System.out.println(redisTemplate.opsForZSet().add("ten",tuples));
查询zset集合中所有元素(从小到大)
redisTemplate.opsForZSet().range("ten",0,-1)
查询zset集合中所有元素(从大到小)
redisTemplate.opsForZSet().reverseRange("ten", 0, -1);
移除集合中单个或者多个元素
redisTemplate.opsForZSet().remove("ten","ten1");
返回有序集合中指定成员的排名,按分数的从小到大排序
redisTemplate.opsForZSet().rank("ten", "ten2");
返回有序集合中指定的成员的排名,按分数的从大到小排序
redisTemplate.opsForZSet().reverseRank("ten", "ten2");
获取指定成员的分数
redisTemplate.opsForZSet().score("ten", "ten2");
为指定成员的分数加分
redisTemplate.opsForZSet().incrementScore("ten", "ten2", 1.5);
如果写的有不对的地方,请大家指出来,我们一起进步,谢谢。