目录
一、导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二、配置application.yml
spring:
# redis配置
redis:
host: localhost
port: 6379
#password: 123456
database: 0 #默认连接0号数据库
jedis:
# jedis连接池配置
pool:
max-active: 8 #最大连接数
max-wait: 1ms #等待时间
max-idle: 4 #最大空闲时间连接数
min-idle: 0 #最小空闲时间连接数
三、编写配置文件类
因为springboot中默认的key序列化器是JdkSerializationRedisSerializer,导致在本地redis-cli.exe中查看key时会出现乱码。配置该类主要是为了在本地的redis-cli.exe中查看key时不会乱码
/*
* redis配置类
* */
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
//默认的key序列化器为:JdkSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory (connectionFactory);
return redisTemplate;
}
}
四、使用
只需要在使用reids做缓存的类中自动注入一个由IOC容器管理的RedisTemplate,然后调用相应的类型方法即可。
1.操作String类型
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
/*
* 操作String类型数据
* */
@Test
public void testString(){
//设置key,value
redisTemplate.opsForValue().set("city","四川");
String city = (String) redisTemplate.opsForValue().get("city");
System.out.println(city);
//设置超时时间
redisTemplate.opsForValue().set("key1","value1",10, TimeUnit.SECONDS);
//setex,当key不存在时才会创建,key存在不做任何操作
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "value2");
System.out.println(aBoolean);//输出false
}
}
2.操作Hash类型
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
/*
* 操作Hash类型数据
* */
@Test
public void testHash(){
HashOperations hashOperations = redisTemplate.opsForHash();
//存值
hashOperations.put("001","name","zhangsan");
hashOperations.put("001","age","20");
hashOperations.put("001","addr","beijing");
//取值
String name = (String) hashOperations.get("001", "name");
System.out.println(name);
//获取hash结构中的所有字段
Set keys = hashOperations.keys("001");
for (Object key : keys) {
System.out.println(key);
}
//获取hash结构中的所有值
List values = hashOperations.values("001");
for (Object value : values) {
System.out.println(value);
}
}
}
3.操作List类型
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
/*
* 操作List类型数据
* */
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
//存值
listOperations.leftPushAll("mylist","a","b","c");
//取值
List<String> mylist = listOperations.range("mylist", 0, -1);
for (String s : mylist) {
System.out.println(s);
}
//获取列表长度
Long size = listOperations.size("mylist");
int lsize = size.intValue();
for (int i = 0; i < lsize; i++) {
//出队列
String element = (String) listOperations.rightPop("mylist");
System.out.println(element);
}
}
}
4.操作Set类型的数据
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
/*
* 操作Set类型的数据
*
* */
@Test
public void testSet(){
SetOperations<String,String> setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("myset","a","b","c","d");
//取值
Set<String> myset = setOperations.members("myset");
for (String s : myset) {
System.out.println(s);
}
//删除
setOperations.remove("myset","a");
}
}
5.操作ZSet类型的数据
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
/*
* 操作ZSet类型的数据
* */
@Test
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//存值
zSetOperations.add("myZset","a",1);
zSetOperations.add("myZset","b",2);
zSetOperations.add("myZset","c",3);
//取值
Set<String> myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
//修改分数
zSetOperations.incrementScore("myZset","a",3);
//删除成员
zSetOperations.remove("myZset","a");
}
}
6.通用操作
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
/*
* 通用操作
* */
@Test
public void testCommon(){
//获取Redish中的所有key
Set<String> keys = redisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
//判断某个key是否存在
Boolean myset = redisTemplate.hasKey("myset");
System.out.println(myset);
//删除指定key
redisTemplate.delete("myset");
//获取指定key对应的value的数据类型
DataType myZset = redisTemplate.type("myZset");
System.out.println(myZset.name());
}
}