簡單搭建的java中支持的Jedis操作Redis,鏈接:https://blog.csdn.net/qq_40437152/article/details/84771050
使用redisTemplate操作Redis數據庫
pom文件 添加Spring封裝的spring-boot-starter-data-redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.9.1</version>
</dependency>
application.properties配置文件:
redis:
host: 47.92.162.82
password: root
port: 6379
timeout: 2000
pool:
#最大連接數(負數表示沒有限制)
max-active: 1000
#最大空閒連接
max-idle: 10
#最大阻塞等待時間(負數表示沒有限制)
max-wait: 100000
database: 0
RedisConfig.java
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
@ConditionalOnMissingBean(name="redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<Object,Object>();
template.setConnectionFactory(redisConnectionFactory);
//使用Jackson2JsonRedisSerializer來序列化和反序列化redis的value值
GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
template.setValueSerializer(serializer);
//使用StringRedisSerializer來序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
return template;
}
}
RedisUtils工具類
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
@Component
public class RedisUtils {
@Autowired
private RedisTemplate<Object, Object> template;
public void put(Object key,Object value){
ValueOperations<Object, Object> ops = template.opsForValue();
ops.set(key,value);
}
public Object get(Object key){
ValueOperations<Object, Object> ops = template.opsForValue();
return ops.get(key);
}
public void put(Object key,Object value,long timeout,TimeUnit unit){
ValueOperations<Object, Object> ops = template.opsForValue();
ops.set(key,value,timeout,unit);
}
public void put(Object key,Object value,long seconds){
ValueOperations<Object, Object> ops = template.opsForValue();
this.put(key, value, seconds, TimeUnit.SECONDS);
}
/**
* 刪除對應的value
*
* @param key
*/
public void remove(final Object key) {
if (exists(key)) {
template.delete(key);
}
}
/**
* 返回redis中key過期時間 key已過期返回-1
*/
public Long getExpire(Object key){
return template.getExpire(key);
}
/**
* 根據當前key和傳入時間顯示過期時間 key已過期返回-1
* @param key
* @param unit
* @return
*/
public long getExpire(Object key,TimeUnit unit){
return template.getExpire(key,unit);
}
/**
* 返回隨機key
* @return
*/
public Object RANDOMKEY(){
return template.randomKey();
}
/**
* 判斷緩存中是否有對應的key;value
*
* @param key
* @return
*/
public boolean exists(final Object key) {
return template.hasKey(key);
}
上面配置的RedisTemplate使用StringRedisSerializer來序列化和反序列化redis的key值,這一步還是很有必要的,在存儲對象,或者redis判斷是否存在key,如果沒配置,會有問題(具體的就不深究了)。
現在,項目還在開發階段,昨天有注意到一個問題,代碼中有對key設置過期時間,但是該key過期後,並沒有自動刪除。
昨天,查資料看了很久,有注意到redis的三個刪除策略。。這裏也不說了,不是很瞭解,也沒有說配置什麼的。
不知道是否有什麼大牛遇到過同樣的問題,歡迎留言!!!