Java中Redis的簡單使用

簡單搭建的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的三個刪除策略。。這裏也不說了,不是很瞭解,也沒有說配置什麼的。

不知道是否有什麼大牛遇到過同樣的問題,歡迎留言!!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章