目录
移出并获取列表的最后一个元素,如果列表没有元素会阻塞直到超时或者发现可弹出元素为止
目标:学会如何在springboot中操作redis
一、导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二、redis配置
spring:
application:
name: springdataredis_demo
#Redis相关配置
redis:
host: localhost
port: 6379
#password: 123456
database: 0 #操作的是0号数据库
jedis:
#Redis连接池配置
pool:
max-active: 8 #最大连接数
max-wait: 1ms #连接池最大阻塞等待时间
max-idle: 4 #连接池中的最大空闲连接
min-idle: 0 #连接池中的最小空闲连接
三、测试
字符串类型:
添加元素:
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作String类型数据
*/
@Test
public void testString(){
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("city","beijing");
}
发现redis库中key和value前面都有一串字符,这是因为key和value被默认序列化了
添加序列化配置:
package com.itheima.config;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* Redis配置类
*/
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//设置key的序列化器
//默认的Key序列化器为:JdkSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置hash类型中key的序列化器
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
setHashKeySerializer中的key指的是field字段:
重新测试,key值正常,value值不用管,java代码获取时会反序列化
获取元素
String city = (String)valueOperations.get("city");
System.out.println("city:"+city);
添加元素并设置有效时间
set(K var1, V var2, long var3, TimeUnit var5):
参数一:key
参数二: value
参数三:有效时间
参数四:有效时间单位
valueOperations.set("city2","suzhou",10l,TimeUnit.SECONDS);
只有key不存在时设置key的值
Boolean aBoolean = valueOperations.setIfAbsent("city3", "suzhou");
Hash类型
设置元素
void put(H var1, HK var2, HV var3);
第一个参数为key,第二个参数为field,第三个参数为value
HashOperations hashOperations = redisTemplate.opsForHash();
//存值
hashOperations.put("002","name","xiaoming");
hashOperations.put("002","age","20");
hashOperations.put("002","address","bj");
获取存储在哈希表中指定字段的值
HV get(H var1, Object var2);
第一个参数为key,第二个参数为field
//取值
String age = (String) hashOperations.get("002", "age");
删除存储在哈希表中指定字段的值
Long delete(H var1, Object... var2);
第一个参数为key,第二个参数为field,可以是多个
获取哈希表中所有字段
//获得hash结构中的所有字段
Set keys = hashOperations.keys("002");
for (Object key : keys) {
System.out.println(key);
}
获取哈希表中所有值
//获得hash结构中的所有值
List values = hashOperations.values("002");
for (Object value : values) {
System.out.println(value);
}
获取哈希表中所有字段和值
Map entries = hashOperations.entries("002");
List
将一个或者多个值插入到列表头部
ListOperations listOperations = redisTemplate.opsForList();
//存值
listOperations.leftPush("mylist","a");
取指定范围内的元素
//取值
List<String> mylist = listOperations.range("mylist", 0, -1);
移除并获取列表最后一个元素
//出队列
String element = (String) listOperations.rightPop("mylist");
获取列表长度
//获得列表长度 llen
Long size = listOperations.size("mylist");
移出并获取列表的最后一个元素,如果列表没有元素会阻塞直到超时或者发现可弹出元素为止
V rightPop(K var1, long var2, TimeUnit var4);
第一个参数为key,第二个参数为超时时间,第三个参数为时间单位
集合set
添加元素
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("myset","a","b","c","a");
返回集合中所有成员
//取值
Set<String> myset = setOperations.members("myset");
获取集合中的成员数
Long size = setOperations.size("myset");
返回所有给定集合的交集
setOperations.add("myset","a","b","c","d");
setOperations.add("myset2","e","f","a","b");
Set <String>intersect = setOperations.intersect("myset", "myset2");
输出结果
返回所有给定集合的并集
Set<String> union = setOperations.union("myset", "myset2");
返回所有给定集合差集
Set<String> difference = setOperations.difference("myset", "myset2");
移除元素中一个或者多个成员
Long remove = setOperations.remove("myset", "a", "b");
有序结合 sorted set
添加元素
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//存值
zSetOperations.add("myZset","a",10.0);
通过索引区间获取指定元素
//取值
Set<String> myZset = zSetOperations.range("myZset", 0, -1);
对指定元素的分数加加上增量increment
//修改分数
zSetOperations.incrementScore("myZset","b",20.0);
移除元素
//删除成员
zSetOperations.remove("myZset","a","b");