把list集合存入Redis并设置过期时间
1.需要导入的jar包
<!-- redis -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.1</version>
</dependency>
<!-- redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- commons-pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.1</version>
</dependency>
<!-- spring-data-redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
2.代码实现
//redis模板
@Autowired
private RedisTemplate<String, Address> redisAddress;
//查询地址
@Override
public List<Address> address() {
//判断redis库是否有这个key
if(redisAddress.hasKey("address")){
System.err.println("redis的地址");
//如果有就查询redis里这个list集合(第一个参数是key,0,-1是查询所有)
List<Address> range = redisAddress.opsForList().range("address", 0,-1);
//返回这个集合
return range;
}else{
//从mysql里查询这个集合
List<Address> address = merchantMapper.address();
//存入redis
redisAddress.opsForList().leftPushAll("address", address);
//给redis设置毫秒值
//第一个参数是key
//第二个参数是值
//第三个参数是时间颗粒度转换,MILLISECONDS是毫秒,所以这个redis的TTl是一小时
redisAddress.expire("address",1000*60*60,TimeUnit.MILLISECONDS);
//返回这个集合
return address;
}
}
3.效果展示
redisAddress.hasKey("address")为false
redisAddress.hasKey("address")为true
两次查询都是能查出值的,第一次查询是从mysql里查出来然后存到Redis,第二次查询是查redis
4.查看redis这个key的过期时间
因为过期时间设置的是1000*60*60(毫秒值一小时)时间颗粒度是TimeUnit.MILLISECONDS(毫秒)
TTl查出的过期时间是秒 3600/60/60=1小时