springboot在整合redis时会涉及两个模板类,其中StringRedisTemplate是RedisTemplate的子类。RedisTemplate是StringRedisTemplate的父类,它可以存储任意数据类型,但是任意类型必须序列化,默认采用的是jdk的序列化方式。
1.添加依赖
<!--redis相关的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.添加配置文件
##redis配置
#spring.redis.host=192.168.163.128
#spring.redis.port=6379
##获取数
#spring.redis.lettuce.pool.max-active=8
#spring.redis.lettuce.pool.max-idle=8
#spring.redis.lettuce.pool.max-wait=1ms
#spring.redis.lettuce.pool.min-idle=0
3.简单测试类
使用StringRedisTemplate
@SpringBootTest
class MarieJedis2ApplicationTests {
//因为springboot整合redis时会把StringRedisTemplate创建并交与Spring容器管理
@Autowired
private StringRedisTemplate redisTemplate;
@Test
void contextLoads() {
ValueOperations operations = redisTemplate.opsForValue();
//查看redis中所有的key
System.out.println(redisTemplate.keys("*"));
//删除指定key的内容
// System.out.println(redisTemplate.delete("k1"));
//获取当前key的剩余时间
System.out.println(redisTemplate.getExpire("user"));
//判断key是否存在 返回0表示不存在,反之就是存在
System.out.println(redisTemplate.hasKey("k1"));
//String相关
//设置指定key的值
// operations.set("k4","1");
//获取指定key的值
Object k2 = operations.get("k2");
System.out.println(k2);
//同时设置一个或多个kv对
/*HashMap<Object, Object> map = new HashMap<>();
map.put("k01","01");
map.put("k02","02");
map.put("k03","03");
operations.multiSet(map);*/
//递增
/*operations.increment("k3");
Object k3 = operations.get("k3");
System.out.println(k3);*/
//递减
/*operations.decrement("k3");
Object k3 = operations.get("k3");
System.out.println(k3);*/
//只有在key不存在时设置key的值
/*Boolean aBoolean = operations.setIfAbsent("k1", "v1111");
System.out.println(aBoolean);*/
//Hash类型
HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
//将哈希表key中的字段field的值设为value
/*hash.put("hk1","name","xyz");
hash.put("hk1","age","18");
hash.put("hk1","sex","男");*/
//获取存储在哈希表中指定字段的值
System.out.println(hash.get("hk1", "name"));
//获取在哈希表中指定的key的所有字段和值
System.out.println(hash.entries("hk1"));
//获取所有哈希表中的字段
System.out.println(hash.keys("hk1"));
//获取哈希表中所有值
System.out.println(hash.values("hk1"));
//List相关
ListOperations<String, String> list = redisTemplate.opsForList();
//将一个或多个值插入到列表头部 可以重复值
/*Long aLong = list.leftPushAll("lk1", "xyz", "xqc", "zzz", "xxx", "ccc");
System.out.println(aLong);*/
//获取列表指定范围内的元素
System.out.println(list.range("lk1", 0, -1));
//从列表左侧移除第一个元素
//System.out.println(list.leftPop("lk1"));
//set相关 无须且不可重复的
SetOperations<String, String> forSet = redisTemplate.opsForSet();
//向集合添加一个或多个成员
/*Long add = forSet.add("sk1", "xyz", "xxx", "yyy", "zzz", "qqq");
System.out.println(add);*/
/*Long add = forSet.add("sk2", "xyz", "xxx", "fff", "hhh", "jjj");
System.out.println(add);*/
//返回集合中的所有成员
System.out.println(forSet.members("sk1"));
//随机获取一个或多个元素
System.out.println(forSet.randomMember("sk1"));
//返回指定所有集合的交集
System.out.println(forSet.intersect("sk1", "sk2"));
//sort set有序集合
//向有序集合添加一个或多个成员,或者个更新已存在成员的分数
/*ZSetOperations zSet = redisTemplate.opsForZSet();
zSet.add("zk1","数学",88.00d);
zSet.add("zk1","语文",88.50d);
zSet.add("zk1","英语",55.00d);
zSet.add("zk1","历史",99.00d);*/
//通过索引区间返回有序集合指定区间内的成员
// System.out.println(zSet.range("zk1", 0, -1));
}
}
4.测试(使用RedisTemplate,默认采用的是jdk的序列化方式 ,统一设置redisTemplate的序列化 )
4.1设置序列化Redisconfig
@Configuration
public class RedisConfig {
//比如验证码
@Bean //该方法的返回对象交于spring容器管理
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setConnectionFactory(factory);
//key序列化方式
template.setKeySerializer(redisSerializer);
//value序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
template.setHashValueSerializer(jackson2JsonRedisSerializer);
//field hash序列化 key field value
template.setHashKeySerializer(jackson2JsonRedisSerializer);
return template;
}
}
4.2测试代码
@SpringBootTest
class SpringRedisApplicationTests3 {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("user2",new user(2,"zmf2",25));
}
}