封装的redisCache工具类

本文介绍了一个名为RedisCacheUtil的@Service工具类,该类封装了Spring Data Redis的多种操作,如设置、获取、删除键值对,增加列表、集合、哈希表元素,以及对Redis键的生命周期进行管理。此外,还提供了针对Set、List、Hash、ZSet的操作方法,方便在实际应用中进行缓存操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Service("redisCacheUtil")
public class RedisCacheUtil {

    private static Logger logger = LoggerFactory.getLogger(RedisCacheUtil.class);

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Resource(name = "redisTemplate")
    private SetOperations<String, Object> setOps;

    @Resource(name = "redisTemplate")
    private HashOperations<String, String, Object> hashOps;

    private static String redisCode = "utf-8";

    /**
     * 删除key值的所有数据,包括列表,键值对,hash     * 
     * @param key
     */
    public void delete(String key) {
        redisTemplate.delete(key);

    }

    public void deleteKeys(Collection<String> keys) {
        redisTemplate.delete(keys);

    }

    public void set(final byte[] key, final byte[] value, final long liveTime) {
        redisTemplate.execute(new RedisCallback<Long>() {
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                connection.set(key, value);
                if (liveTime > 0) {

                }
                return 1L;
            }
        });
    }

    /**
     * 设置key,value     * 
     * @param key
     * @param value
     */
    public void set(String key, String value, long liveTime) {
        set(key.getBytes(), value.getBytes(), liveTime);
    }

    public void set(String key, String value) {
        this.set(key, value, 0L);
    }

    /**
     * redis incr的使用,将键的整数值增加
     * 
     * @param key
     * @param step
     * @return
     */
    public long setIncr(final String key, long step) {
        return redisTemplate.opsForValue().increment(key, step);
    }

    /**
     * 根据key获取value
     * 
     * @param key
     * @return
     */
    public String get(final String key) {
        return redisTemplate.execute(new RedisCallback<String>() {
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                try {
                    return new String(connection.get(key.getBytes()), redisCode);
                } catch (UnsupportedEncodingException e) {
                    logger.error(e.getMessage(), e);
                }
                return "";
            }
        });
    }

    public Set<String> getKeys(final String key) {
        return redisTemplate.keys(key);
    }

    public long getIncrValue(final String key) {
        return redisTemplate.execute(new RedisCallback<Long>() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                byte[] rowkey = serializer.serialize(key);
                byte[] rowval = connection.get(rowkey);
                try {
                    String val = serializer.deserialize(rowval);
                    return Long.parseLong(val);
                } catch (Exception e) {
                    return 0L;
                }
            }
        });
    }

    public void expire(final String key, final long timeout, final TimeUnit unit) {
        redisTemplate.expire(key, timeout, unit);
    }

    /**
     * 向列表头部添加值
     * 
     * @param key
     * @param value
     */
    public void addListFromHeader(String key, Object obj) {
        redisTemplate.opsForList().leftPush(key, obj);
    }

    /**
     * 添加列表
     * 
     * @param key
     * @param value
     */
    public void addList(String key, Object value) {
        redisTemplate.opsForList().rightPush(key, value);
    }

    /**
     * 获取列表数据
     * 
     * @param key
     * @param start
     * @param end
     * @return
     */
    public Object listPop(String key, int start, int end) {
        List<Object> objs = redisTemplate.opsForList().range(key, start, end);
        return objs;
    }

    /**
     * 获取列表长度
     * 
     * @param key
     * @return
     */
    public Long getListLength(String key) {
        return redisTemplate.opsForList().size(key);
    }

    /**
     * 获取列表最后一位值,并删除
     * 
     * @param key
     * @return
     */
    public Object popListLast(String key) {
        return redisTemplate.opsForList().rightPop(key);
    }

    /**
     * 删除列表某一位值
     * 
     * @param key
     * @param i
     * @param value
     */
    public Long delList(String key, long i, Object value) {
        return redisTemplate.opsForList().remove(key, i, value);
    }

    /**
     * 获取列表第一位,并删除
     * 
     * @param key
     * @return
     */
    public Object popListFirst(String key) {
        return redisTemplate.opsForList().leftPop(key);
    }

    /**
     * 设置某一位值
     * 
     * @param key
     * @param index
     * @param value
     */
    public void setListByIndex(String key, int index, Object value) {
        redisTemplate.opsForList().set(key, index, value);
    }

    /**
     * 向列表尾部追加一组数据
     * 
     * @param key
     * @param values
     */
    public void addListBundle(String key, List<Object> values) {
        redisTemplate.opsForList().rightPushAll(key, values);
    }

    /**
     * 向列表头部追加一组数据
     * 
     * @param key
     * @param values
     */
    public void addListBundleFromHeader(String key, List<Object> values) {
        redisTemplate.opsForList().leftPushAll(key, values);
    }

    /**
     * 获取列表某一位值
     */
    public Object getListByIndex(String key, long index) {
        return redisTemplate.opsForList().index(key, index);
    }

    /**
     * 
     * 功能描述: (Set集合)将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。<br>
     * 〈功能详细描述〉
     *
     * @param key
     * @param values
     * @since [产品/模块版本](可选)
     */
    public void addSet(String key, Object... values) {
        setOps.add(key, values);

    }

    /**
     * 
     * 功能描述:(Set集合)移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 <br>
     * 〈功能详细描述〉
     *
     * @param key
     * @param values
     * @since [产品/模块版本](可选)
     */
    public void removeSet(String key, Object... values) {
        setOps.remove(key, values);
    }

    /**
     * 
     * 功能描述:(Set集合)返回集合 key 中的所有成员 <br>
     * 〈功能详细描述〉
     *
     * @param key
     * @return
     * @since [产品/模块版本](可选)
     */
    public Set<Object> getMembers(String key) {
        Set<Object> members = setOps.members(key);
        return members;
    }

    /**
     * set Hash列表值(String,Long)
     */
    public void setAllHash(String key, Map<String, String> m) {
        hashOps.putAll(key, m);
    }
    /**
     * set Object对象到hash,字段必须为基本数据类型或包装类,已经时间和String类型
     */
    public void setObjectToHash(String key, Object obj) {
        Map<String, String> stringMap = EntityUtils.objectToHash(obj);
        hashOps.putAll(key, stringMap);
    }
    /**
     * get Object对象到 根据hashKey;
     */
    public <T> T getHashToObjectBykey(String key, Class t) {
        Map<String, Object> entries = hashOps.entries(key);
        return EntityUtils.hashToObject2(entries, t);

    }

    /**
     * get Hash列表值
     */
    public Map<String, Object> getAllHash(String key) {
        return hashOps.entries(key);
    }

    /**
     * 判断某个key是否存在
     */
    public Boolean isExist(String key) {
        return redisTemplate.hasKey(key);
    }

    /**
     * hash指定key加一
     */
    public void incrHash(String key, String hashKey, Integer i) {
        hashOps.increment(key, hashKey, i);
    }

    /**
     * 增加hash字段
     */
    public void putHashKey(String key, String hashKey, String value) {
        hashOps.put(key, hashKey, value);
    }

    /**
     * 获取hash字段
     */
    public String getHashKey(String key, String hashKey) {
        return (String) hashOps.get(key, hashKey);
    }

    /**
     * 删除hash字段
     */
    public void delHashKey(String key, String hashKey) {
        hashOps.delete(key, hashKey);
    }

    //  key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间
    public long getExpire(String key) {
        return redisTemplate.getExpire(key);
    }

    /**
     * 增加hash字段
     */
    public void addHashKey(String key, String hashKey, Object value) {
        hashOps.put(key, hashKey, value);
    }

    /**
     * 获取hash字段
     */
    public Object getHashValse(String key, String hashKey) {
        return hashOps.get(key, hashKey);
    }
    // redisTemplate操作 zset的一些 封装;

    /**
     * 给指定的集合添加 字段和分数
     */
    public void addZset(String key, Object var, double score) {
        redisTemplate.opsForZSet().add(key, var, score);
    }

    /**
     * 批量添加, 实现了ZSetOperations.TypedTuple<>接口的的set集合 对象内要有getVule,getSorce方法;
     * 
     * @param key
     * @param var2
     */
    public void addZset(String key, Set<ZSetOperations.TypedTuple<Object>> var2) {
        redisTemplate.opsForZSet().add(key, var2);
    }

    /**
     * 给指定的集合移除字段
     */
    public void removeZset(String key, Object var) {
        redisTemplate.opsForZSet().remove(key, var);
    }

    /**
     * 获取排序后的结果
     */
    public Set<Object> reverseRange(final String key, final long start, final long end) {
        Set<Object> objects = redisTemplate.opsForZSet().reverseRange(key, start, end);
        return objects;
    }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值