1. 程式人生 > >Redis工具類對各種資料型別的操作

Redis工具類對各種資料型別的操作

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Service
public class RedisService {


    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
     // HashMap操作
    @Resource
    private HashOperations<String, String, Object> hashOperations;
    // Object操作
    @Resource
    private ValueOperations<String, Object> valueOperations;
     // List操作
    @Resource
    private ListOperations<String, Object> listOperations;

     // set操作
    @Resource
    private SetOperations<String, Object> setOperations;
     // ZSet操作
    @Resource
    private ZSetOperations<String, Object> zSetOperations;

    //---------------------------------------------------------------------
    // redisTemplate
    //---------------------------------------------------------------------

    /**
     * 判斷key是否存在
     * @param key
     */
    public boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }

    /**
     * 刪除key
     * @param key
     */
    public void delete(String key){
        redisTemplate.delete(key);
    }

    /**
     * 判斷指定key的hashKey是否存在
     * @param key
     * @param hashKey
     * @return
     */
    public boolean hasKey(String key, String hashKey) {
        return redisTemplate.opsForHash().hasKey(key, hashKey);
    }

    /**
     * 設定超時時間
     * @param key
     * @param timeout
     * @param unit
     */
    public void expire(String key, final long timeout, final TimeUnit unit) {
        redisTemplate.expire(key, timeout, unit);
    }

    /**
     * 獲取過期時間
     * @param key
     * @return
     */
    public long ttl(String key){
        return redisTemplate.getExpire(key);
    }

    /**
     * 獲取指定pattern的key
     * @param pattern
     * @return
     */
    public Set<String> keys(String pattern) {
        return redisTemplate.keys(pattern);
    }

    /**
     * 刪除多個key
     * @param keys
     */
    public void delete(Set<String> keys) {
        redisTemplate.delete(keys);
    }

    /**
     * 設定過期時間
     * @param key
     * @param expire
     */
    private void setExpire (String key,long expire){
        if (expire != -1) {
            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
        }
    }

    //---------------------------------------------------------------------
    // ValueOperations -> Redis String/Value 操作
    //---------------------------------------------------------------------

    /**
     * 設定key-value值
     */
    public void addValue(String key, Object value,long expire){
        valueOperations.set(key, value);

        setExpire(key,expire);
    }

    /**
     * 設定key-value值,傳入時間單位
     */
    public void addValue(String key, Object value,long expire, TimeUnit timeUnit){
        valueOperations.set(key, value, expire, timeUnit);

    }

    /**
     * 設定key-value值, 無過期時間
     */
    public void addValue(String key, Object value){
        valueOperations.set(key, value);
    }

    /**
     * 獲取key的值
     *
     */
    public Object getValue(String key){
        return valueOperations.get(key);
    }

    //---------------------------------------------------------------------
    // HashOperations -> Redis Redis Hash 操作
    //---------------------------------------------------------------------

    /**
     * 向redis 中新增內容
     * @param key       儲存key
     * @param hashKey   hashKey
     * @param data      儲存物件 data
     * @param expire    過期時間    -1:表示不過期
     */
    public void addHashValue(String key,String hashKey, Object data, long expire) {
        hashOperations.put(key, hashKey, data);

        setExpire(key,expire);
    }

    /**
     * Hash 新增資料
     * @param key   key
     * @param map   data
     */
    public void addAllHashValue(String key, Map<String, Object> map, long expire) {
        hashOperations.putAll(key, map);

        setExpire(key,expire);
    }

    /**
     * 刪除hash key
     * @param key       key
     * @param hashKey   hashKey
     */
    public long deleteHashValue(String key, String hashKey) {
        return hashOperations.delete(key, hashKey);
    }

    /**
     * 獲取資料
     */
    public Object getHashValue(String key, String hashKey) {
        return hashOperations.get(key, hashKey);
    }

    /**
     * 批量獲取資料
     */
    public List<Object> getHashAllValue(String key) {
        return hashOperations.values(key);
    }

    /**
     * 批量獲取指定hashKey的資料
     */
    public List<Object> getHashMultiValue(String key, List<String> hashKeys) {
        return  hashOperations.multiGet(key, hashKeys);
    }

    /**
     * 獲取hash數量
     */
    public Long getHashCount(String key) {
        return hashOperations.size(key);
    }


    //---------------------------------------------------------------------
    // ZSetOperations -> Redis Sort Set 操作
    //---------------------------------------------------------------------

    /**
     * 設定zset值
     */
    public boolean addZSetValue(String key, Object member, long score){
        return zSetOperations.add(key, member, score);
    }

    /**
     * 設定zset值
     */
    public boolean addZSetValue(String key, Object member, double score){
        return zSetOperations.add(key, member, score);
    }

    /**
     * 批量設定zset值
     */
    public long addBatchZSetValue(String key, Set<ZSetOperations.TypedTuple<Object>> tuples){
        return zSetOperations.add(key, tuples);
    }

    /**
     * 自增zset值
     */
    public void incZSetValue(String key, String member, long delta){
        zSetOperations.incrementScore(key, member, delta);
    }

    /**
     * 獲取zset數量
     */
    public long getZSetScore(String key, String member){
        Double score = zSetOperations.score(key, member);
        if(score==null){
            return 0;
        }else{
            return score.longValue();
        }
    }

    /**
     * 獲取有序集 key 中成員 member 的排名 。其中有序整合員按 score 值遞減 (從小到大) 排序。
     */
    public Set<ZSetOperations.TypedTuple<Object>> getZSetRank(String key, long start, long end){
        return zSetOperations.rangeWithScores(key, start, end);
    }


    //---------------------------------------------------------------------
    // listOperations -> Redis List() 操作
    //---------------------------------------------------------------------

    /**
     * 新增list列表
     */
    public void addListValue(String key,Object list){
        listOperations.leftPush(key,list);
    }

    /**
     * 獲取指定Key對應的list
     */
    public Object getListValue(String key){
        return listOperations.leftPop(key);
    }

    //---------------------------------------------------------------------
    // setOperations -> Redis Set() 操作
    //---------------------------------------------------------------------

    /**
     * 新增Set集合集合
     */
    public void addSetValue(String key,Object list){
        setOperations.add(key,list);
    }

    /**
     * 獲取指定Key對應的set
     */
    public Object getSetValue(String key){
        return setOperations.members(key);
    }

    /**
     * 獲取並移除指定key的值
     */
    public Object popSetValue(String key){
        return setOperations.pop(key);
    }

}