RedisUtils工具类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RedisUtils工具类相关的知识,希望对你有一定的参考价值。

参考技术A package com.chen.utils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.stereotype.Component;

import org.springframework.util.CollectionUtils;

import java.util.Collection;

import java.util.List;

import java.util.Map;

import java.util.Set;

import java.util.concurrent.TimeUnit;

@Component

public final class RedisUtil

@Autowired

private RedisTemplate redisTemplate;

/*

指定缓存失效时间

@param key 键

@param time 时间(秒)

@return

*/

public boolean expire(String key,long time)

try

if (time > 0)

redisTemplate.expire(key,time, TimeUnit.SECONDS);



return true;

catch (Exception e)

return false;





/*

根据key 获取过期时间

@param key 键 不能为null

@return 时间(秒)返回0代表永久有效

*/

public long getExpire(String key)

return redisTemplate.getExpire(key,TimeUnit.SECONDS);



/*

判断key 是否存在

@param key 键

@return ture 存在 false不存在

*/

public boolean hasKey(String key)

try

return redisTemplate.hasKey(key);

catch (Exception e)

return false;





/*

删除缓存

@param key 可以传一个值或者多个值

*/

@SuppressWarnings("unchecked")

public void del(String... key)

if (key != null && key.length > 0)

if (key.length == 1)

redisTemplate.delete(key[0]);

else

redisTemplate.delete((Collection ) CollectionUtils.arrayToList(key));







//=========================String==================================

/*

普通缓存获取

@param key 键

@return 值

*/

public Object get(String key)

return key == null ? null : redisTemplate.opsForValue().get(key);



/*

普通缓存放入

@param key 键

@param value 值

@return turn 成功 false 失败

*/

public boolean set(String key,Object value)

try

redisTemplate.opsForValue().set(key,value);

return true;

catch (Exception e)

return false;





/*

普通缓存放入并设置时间

@param key 键

@param value 值

@param time 时间(秒) time要大于0 如果time小于0,将设置成无限制

@return turn 成功 false 失败

*/

public boolean set(String key,Object value,long time)

try

if (time > 0)

redisTemplate.opsForValue().set(key,value,time,TimeUnit.SECONDS);

else

redisTemplate.opsForValue().set(key,value);



return true;

catch (Exception e)

return false;





/*

递增

@param key 键

@param delta 值 要增加几(大于0)

@return

*/

public long incr(String key,long delta)

if (delta < 0)

throw new RuntimeException("递增因子必须大于0");



return redisTemplate.opsForValue().increment(key,delta);



/*

递减

@param key 键

@param delta 值 要减少几(大于0)

@return

*/

public long decr(String key,long delta)

if (delta < 0)

throw new RuntimeException("递减因子必须大于0");



return redisTemplate.opsForValue().decrement(key,delta);



// ================================Map=================================

/**

* HashGet

* @param key 键 不能为null

* @param item 项 不能为null

* @return 值

*/

public Object hget(String key, String item)

return redisTemplate.opsForHash().get(key, item);



/**

* 获取hashKey对应的所有键值

* @param key 键

* @return 对应的多个键值

*/

public Map hmget(String key)

return redisTemplate.opsForHash().entries(key);



/**

* HashSet

* @param key 键

* @param map 对应多个键值

* @return true 成功 false 失败

*/

public boolean hmset(String key, Map map)

try

redisTemplate.opsForHash().putAll(key, map);

return true;

catch (Exception e)

e.printStackTrace();

return false;





/**

* HashSet 并设置时间

* @param key 键

* @param map 对应多个键值

* @param time 时间(秒)

* @return true成功 false失败

*/

public boolean hmset(String key, Map map, long time)

try

redisTemplate.opsForHash().putAll(key, map);

if (time > 0)

expire(key, time);



return true;

catch (Exception e)

e.printStackTrace();

return false;





/**

* 向一张hash表中放入数据,如果不存在将创建

* @param key 键

* @param item 项

* @param value 值

* @return true 成功 false失败

*/

public boolean hset(String key, String item, Object value)

try

redisTemplate.opsForHash().put(key, item, value);

return true;

catch (Exception e)

e.printStackTrace();

return false;





/**

* 向一张hash表中放入数据,如果不存在将创建

* @param key 键

* @param item 项

* @param value 值

* @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间

* @return true 成功 false失败

*/

public boolean hset(String key, String item, Object value, long time)

try

redisTemplate.opsForHash().put(key, item, value);

if (time > 0)

expire(key, time);



return true;

catch (Exception e)

e.printStackTrace();

return false;





/**

* 删除hash表中的值

* @param key 键 不能为null

* @param item 项 可以使多个 不能为null

*/

public void hdel(String key, Object... item)

redisTemplate.opsForHash().delete(key, item);



/**

* 判断hash表中是否有该项的值

* @param key 键 不能为null

* @param item 项 不能为null

* @return true 存在 false不存在

*/

public boolean hHasKey(String key, String item)

return redisTemplate.opsForHash().hasKey(key, item);



/**

* hash递增 如果不存在,就会创建一个 并把新增后的值返回

* @param key 键

* @param item 项

* @param by 要增加几(大于0)

* @return

*/

public double hincr(String key, String item, double by)

return redisTemplate.opsForHash().increment(key, item, by);



/**

* hash递减

* @param key 键

* @param item 项

* @param by 要减少记(小于0)

* @return

*/

public double hdecr(String key, String item, double by)

return redisTemplate.opsForHash().increment(key, item, -by);



// ============================set=============================

/**

* 根据key获取Set中的所有值

* @param key 键

* @return

*/

public Set sGet(String key)

try

return redisTemplate.opsForSet().members(key);

catch (Exception e)

e.printStackTrace();

return null;





/**

* 根据value从一个set中查询,是否存在

* @param key 键

* @param value 值

* @return true 存在 false不存在

*/

public boolean sHasKey(String key, Object value)

try

return redisTemplate.opsForSet().isMember(key, value);

catch (Exception e)

e.printStackTrace();

return false;





/**

* 将数据放入set缓存

* @param key 键

* @param values 值 可以是多个

* @return 成功个数

*/

public long sSet(String key, Object... values)

try

return redisTemplate.opsForSet().add(key, values);

catch (Exception e)

e.printStackTrace();

return 0;





/**

* 将set数据放入缓存

* @param key 键

* @param time 时间(秒)

* @param values 值 可以是多个

* @return 成功个数

*/

public long sSetAndTime(String key, long time, Object... values)

try

Long count = redisTemplate.opsForSet().add(key, values);

if (time > 0)

expire(key, time);

return count;

catch (Exception e)

e.printStackTrace();

return 0;





/**

* 获取set缓存的长度

* @param key 键

* @return

*/

public long sGetSetSize(String key)

try

return redisTemplate.opsForSet().size(key);

catch (Exception e)

e.printStackTrace();

return 0;





/**

* 移除值为value的

* @param key 键

* @param values 值 可以是多个

* @return 移除的个数

*/

public long setRemove(String key, Object... values)

try

Long count = redisTemplate.opsForSet().remove(key, values);

return count;

catch (Exception e)

e.printStackTrace();

return 0;





// ===============================list=================================

/**

* 获取list缓存的内容

* @param key 键

* @param start 开始

* @param end 结束 0 到 -1代表所有值

* @return

*/

public List lGet(String key, long start, long end)

try

return redisTemplate.opsForList().range(key, start, end);

catch (Exception e)

e.printStackTrace();

return null;





/**

* 获取list缓存的长度

* @param key 键

* @return

*/

public long lGetListSize(String key)

try

return redisTemplate.opsForList().size(key);

catch (Exception e)

e.printStackTrace();

return 0;





/**

* 通过索引 获取list中的值

* @param key 键

* @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推

* @return

*/

public Object lGetIndex(String key, long index)

try

return redisTemplate.opsForList().index(key, index);

catch (Exception e)

e.printStackTrace();

return null;





/**

* 将list放入缓存

* @param key 键

* @param value 值

* @return

*/

public boolean lSet(String key, Object value)

try

redisTemplate.opsForList().rightPush(key, value);

return true;

catch (Exception e)

e.printStackTrace();

return false;





/**

* 将list放入缓存

* @param key 键

* @param value 值

* @param time 时间(秒)

* @return

*/

public boolean lSet(String key, Object value, long time)

try

redisTemplate.opsForList().rightPush(key, value);

if (time > 0)

expire(key, time);

return true;

catch (Exception e)

e.printStackTrace();

return false;





/**

* 将list放入缓存

* @param key 键

* @param value 值

* @return

*/

public boolean lSet(String key, List value)

try

redisTemplate.opsForList().rightPushAll(key, value);

return true;

catch (Exception e)

e.printStackTrace();

return false;





/**

* 将list放入缓存

*

* @param key 键

* @param value 值

* @param time 时间(秒)

* @return

*/

public boolean lSet(String key, List value, long time)

try

redisTemplate.opsForList().rightPushAll(key, value);

if (time > 0)

expire(key, time);

return true;

catch (Exception e)

e.printStackTrace();

return false;





/**

* 根据索引修改list中的某条数据

* @param key 键

* @param index 索引

* @param value 值

* @return

*/

public boolean lUpdateIndex(String key, long index, Object value)

try

redisTemplate.opsForList().set(key, index, value);

return true;

catch (Exception e)

e.printStackTrace();

return false;





/**

* 移除N个值为value

* @param key 键

* @param count 移除多少个

* @param value 值

* @return 移除的个数

*/

public long lRemove(String key, long count, Object value)

try

Long remove = redisTemplate.opsForList().remove(key, count, value);

return remove;

catch (Exception e)

e.printStackTrace();

return 0;





单机版 RedisUtils({基本操作封装工具类})

<!--集成的RedisJAR-->
<!--引入jedis需的jar包-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
<!--Spring整合jedis的依赖-->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.1.RELEASE</version>
</dependency>
package com.dsj.gdbd.utils.jedis;

import com.dsj.gdbd.utils.serialize.SerializingUtil;
import org.apache.log4j.Logger;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * s
 *
 * @描述: Redis缓存工具类.
 * @版本: V1.0
 */
public class RedisUtils {

    private static Logger logger = Logger.getLogger(RedisUtils.class);

    /**
     * 默认缓存时间
     */
    private static final int DEFAULT_CACHE_SECONDS = 60 * 60 * 1;// 单位秒 设置成一个钟

    /**
     * 连接池
     **/
    private static JedisSentinelPool jedisSentinelPool;

    /**
     * 释放redis资源
     *
     * @param jedis
     */
    private static void releaseResource(Jedis jedis) {
        if (jedis != null) {
            jedisSentinelPool.returnResource(jedis);
        }
    }

    /**
     * 删除Redis中的所有key
     *
     * @throws Exception
     */
    public static void flushAll() {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            jedis.flushAll();
        } catch (Exception e) {
            logger.error("Cache清空失败:" + e);
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 保存一个对象到Redis中(缓存过期时间:使用此工具类中的默认时间) . <br/>
     *
     * @param key    键 . <br/>
     * @param object 缓存对象 . <br/>
     * @return true or false . <br/>
     * @throws Exception
     */
    public static Boolean save(Object key, Object object) {
        return save(key, object, DEFAULT_CACHE_SECONDS);
    }

    /**
     * 保存一个对象到redis中并指定过期时间
     *
     * @param key     键 . <br/>
     * @param object  缓存对象 . <br/>
     * @param seconds 过期时间(单位为秒).<br/>
     * @return true or false .
     */
    public static Boolean save(Object key, Object object, int seconds) {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            jedis.set(SerializingUtil.serialize(key), SerializingUtil.serialize(object));
            jedis.expire(SerializingUtil.serialize(key), seconds);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("Cache保存失败:" + e);
            return false;
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 根据缓存键获取Redis缓存中的值.<br/>
     *
     * @param key 键.<br/>
     * @return Object .<br/>
     * @throws Exception
     */
    public static Object get(Object key) {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            byte[] obj = jedis.get(SerializingUtil.serialize(key));
            return obj == null ? null : SerializingUtil.deserialize(obj);
        } catch (Exception e) {
            logger.error("Cache获取失败:" + e);
            return null;
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 根据缓存键清除Redis缓存中的值.<br/>
     *
     * @param key
     * @return
     * @throws Exception
     */
    public static Boolean del(Object key) {
        Jedis jedis = null;
        try {
            // System.out.println(key);
            jedis = jedisSentinelPool.getResource();
            jedis.del(SerializingUtil.serialize(key));
            return true;
        } catch (Exception e) {
            logger.error("Cache删除失败:" + e);
            return false;
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 根据缓存键清除Redis缓存中的值.<br/>
     *
     * @param keys
     * @return
     * @throws Exception
     */
    public static Boolean del(Object... keys) {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            jedis.del(SerializingUtil.serialize(keys));
            return true;
        } catch (Exception e) {
            logger.error("Cache删除失败:" + e);
            return false;
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * @param key
     * @param seconds 超时时间(单位为秒)
     * @return
     */
    public static Boolean expire(Object key, int seconds) {

        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            jedis.expire(SerializingUtil.serialize(key), seconds);
            return true;
        } catch (Exception e) {
            logger.error("Cache设置超时时间失败:" + e);
            return false;
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 添加一个内容到指定key的hash中
     *
     * @param key
     * @param field
     * @param value
     * @return
     */
    public static Boolean addHash(String key, Object field, Object value) {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            jedis.hset(SerializingUtil.serialize(key), SerializingUtil.serialize(field), SerializingUtil.serialize(value));
            return true;
        } catch (Exception e) {
            logger.error("Cache保存失败:" + e);
            return false;
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 从指定hash中拿一个对象
     *
     * @param key
     * @param field
     * @return
     */
    public static Object getHash(Object key, Object field) {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            byte[] obj = jedis.hget(SerializingUtil.serialize(key), SerializingUtil.serialize(field));
            return SerializingUtil.deserialize(obj);
        } catch (Exception e) {
            logger.error("Cache读取失败:" + e);
            return null;
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 从hash中删除指定filed的值
     *
     * @param key
     * @param field
     * @return
     */
    public static Boolean delHash(Object key, Object field) {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            long result = jedis.hdel(SerializingUtil.serialize(key), SerializingUtil.serialize(field));
            return result == 1 ? true : false;
        } catch (Exception e) {
            logger.error("Cache删除失败:" + e);
            return null;
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 拿到缓存中所有符合pattern的key
     *
     * @param pattern
     * @return
     */
    public static Set<byte[]> keys(String pattern) {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            Set<byte[]> allKey = jedis.keys(("*" + pattern + "*").getBytes());
            return allKey;
        } catch (Exception e) {
            logger.error("Cache获取失败:" + e);
            return new HashSet<byte[]>();
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 获得hash中的所有key value
     *
     * @param key
     * @return
     */
    public static Map<byte[], byte[]> getAllHash(Object key) {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool.getResource();
            Map<byte[], byte[]> map = jedis.hgetAll(SerializingUtil.serialize(key));
            return map;
        } catch (Exception e) {
            logger.error("Cache获取失败:" + e);
            return null;
        } finally {
            releaseResource(jedis);
        }
    }

    /**
     * 判断一个key是否存在
     *
     * @param key
     * @return
     */
    public static Boolean exists(Object key) {
        Jedis jedis = null;
        Boolean result = false;
        try {
            jedis = jedisSentinelPool.getResource();
            result = jedis.exists(SerializingUtil.serialize(key));
            return result;
        } catch (Exception e) {
            logger.error("Cache获取失败:" + e);
            return false;
        } finally {
            releaseResource(jedis);
        }
    }
    public void setJedisSentinelPool(JedisSentinelPool jedisSentinelPool) {
        RedisUtils.jedisSentinelPool = jedisSentinelPool;
    }

    public static JedisSentinelPool getJedisSentinelPool() {
        return jedisSentinelPool;
    }
}

 

以上是关于RedisUtils工具类的主要内容,如果未能解决你的问题,请参考以下文章

单机版 RedisUtils({基本操作封装工具类})

SpringBoot实战:整合Redismybatis,封装RedisUtils工具类等(附源码)

RedisUtils工具类,设置缓存,然后需要在删除,更新插入的时候清空缓存,保持redis和mysql的数据一致

RedisUtils工具类,设置缓存,然后需要在删除,更新插入的时候清空缓存,保持redis和mysql的数据一致

SpringBoot项目中创建redisUtils,在调用redisUtils的静态方法时,报空指针异常

基于jedis的Redis工具类可以收藏一下