springboot在整合redis时提高两个模板类,StringRedisTemplate 和 RedisTemplate. 以后对redis的操作都在该模板类中。
StringRedisTemplate是RedisTemplate的子类。
StringRedisTemplate
整合的相关依赖
<!--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>
修改配置文件
spring.redis.host=192.168.32.175
spring.redis.port=6379
#最大连接数
spring.redis.jedis.pool.max-active=8
#最大空弦数
spring.redis.jedis.pool.max-idle=8
#等待几秒断联
spring.redis.jedis.pool.max-wait=-1ms
#最小空闲数
spring.redis.lettuce.pool.min-idle=0
测试
@Autowired
StringRedisTemplate redisTemplate;
@Test
void contextLoads() {
System.out.println("keys="+redisTemplate.keys("*"));//获取所有key
Boolean k1 = redisTemplate.hasKey("k1");//判断 k1 是否存在
System.out.println(k1);
Boolean k11 = redisTemplate.delete("k1");//删除 key
System.out.println(k11);
// todo 关于字符串的操作
ValueOperations<String, String> forValue = redisTemplate.opsForValue();
forValue.set("k1","v1");
System.out.println(forValue.get("k1"));
//存入后返回布尔值 确认是否存入
Boolean aBoolean = forValue.setIfAbsent("k2", "v2");
System.out.println(aBoolean);
// 自增 自减
Long k3 = forValue.increment("k3", 20);
System.out.println(k3);
Long k4 = forValue.decrement("k4", 20);
System.out.println(k4);
// 设置过期时间 3 分钟
forValue.set("k5","v5",3, TimeUnit.MINUTES);
// todo 关于 hashmap
HashOperations<String, Object, Object> forHash = redisTemplate.opsForHash();
// hmset 同时将多个 field-value (域-值)对设置到哈希表 key 中
forHash.put("k1","name","平墨");
forHash.put("k1","age","16");
forHash.put("k1","sex","男");
Map<String,String> map = new HashMap<>();
map.put("name","平墨2");
map.put("age","15");
map.put("sex","男");
forHash.putAll("k2",map);
// hkeys 获取所有哈希表中的字段
Set<Object> k1 = forHash.keys("k1");
System.out.println(k1);
// hgetall 获取在哈希表中指定 key 的所有字段和值
System.out.println(forHash.entries("k1"));
// hvals 获取哈希表中所有值
System.out.println(forHash.values("k1"));
// hexists 查看哈希表 key 中,指定的字段是否存在。
System.out.println(forHash.hasKey("k1", "name"));
// hget 获取存储在哈希表中指定字段的值
System.out.println(forHash.get("k1", "name"));
// todo 关于 list
ListOperations<String, String> forList = redisTemplate.opsForList();
//在列表中添加一个或多个值 与 forList.leftPush() 存入相反
//forList.rightPushAll("k1","1","2","3","4");
// 只有这一个查看方法 从左往右查看 -1 为默认为最后一个
System.out.println(forList.range("k1", 0, -1));
// lindex 通过索引获取列表值
System.out.println(forList.index("k1", 2));
// lpop 移除并获取列表最左边的值
System.out.println(forList.leftPop("k1"));
// todo 关于 set
SetOperations<String, String> forSet = redisTemplate.opsForSet();
// sadd 添加
forSet.add("k1","1","2","3","4");
// scard 获取指定key的value个数
System.out.println(forSet.size("k1"));
// sismember 判断 member 元素是否是集合 key 的成员
System.out.println(forSet.isMember("k1", "1"));
// srem 删除key中指定的value
System.out.println(forSet.remove("k1", "4"));
}
RedisTemplate
它是StringRedisTemplate的父类,它类可以存储任意数据类型,但是任意类型必须序列化,默认采用的是jdk的序列化方式。jdk序列化方式阅读能力差,而且占用空间大. 我们在使用是一般需要人为指定序列化方式。
@Autowired
RedisTemplate redisTemplate;
@Test
void contextLoads() {
redisTemplate.setKeySerializer(new StringRedisSerializer());//将key的值设置序列化
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//将value的值设置序列化
ValueOperations forValue = redisTemplate.opsForValue();
forValue.set("user",new User(1,"平墨","焦作"));
System.out.println(forValue.get("user"));
}