Redis 工具类

pom 文件中添加依赖

        <!-- Redis -->
        <!-- 引入 redis 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.6.3</version>
        </dependency>


        <!-- JSON -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.79</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.2.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.13.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.13.2</version>
        </dependency>

RedisUtil

package com.zcq.util;

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;


/**
 * Redis 工具类
 *
 * @author z
 * @link redis https://blog.csdn.net/qq_42907552/article/details/112131000
 */
@Service
public class RedisUtil {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private ObjectMapper objectMapper;

    /**
     * 是否包含Key
     */
    public boolean hasKey(String key) {
        // 这里有可能有空值警告,所以要 Boolean.TRUE 判断准确性
        // https://blog.csdn.net/qq_40822742/article/details/112291105
        return Boolean.TRUE.equals(stringRedisTemplate.hasKey(key));
    }

    /**
     * 存入redis time默认单位是小时,使用时请自行计算
     */
    public void set(String key, Object o, long time) {
        this.deleteKey(key);
        if (StringUtils.isEmpty(o)) {
            return;
        }
        stringRedisTemplate.opsForValue().set(key, JSON.toJSONString(o), time, TimeUnit.HOURS);
    }

    /**
     * value+=1
     */
    public Long increment(String key) {
        return stringRedisTemplate.opsForValue().increment(key);
    }

    /**
     * 获取缓存数据 统一返回String类型,使用时请自行转换
     */
    public String get(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    /**
     * redis删除单个key
     */
    public boolean deleteKey(String key) {
        return Boolean.TRUE.equals(stringRedisTemplate.delete(key));
    }


    /**
     * 删除多个 key
     */
    public Long deleteKeys(String keys) {
        Set key = stringRedisTemplate.keys(keys + "");
        return stringRedisTemplate.delete(key);
    }

    public Long deleteKeys(String... key) {
        if (key != null && key.length > 0) {
            if (key.length == 1) {
                stringRedisTemplate.delete(key[0]);
                return 1L;
            } else {
                return stringRedisTemplate.delete(Arrays.asList(key));
            }
        }
        return 0L;
    }

    /**
     * 此处要注意rightPushAll的坑,下一篇会详细介绍向右添加
     */
    public void rightPushAll(String key, List list) throws JsonProcessingException {
        // 先删除再添加
        this.deleteKey(key);
        String[] objArr = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            objArr[i] = this.beanToString(list.get(i));
        }
        stringRedisTemplate.opsForList().rightPushAll(key, objArr);
    }

    /**
     * redis分布式锁 时间单位是分钟,请自行计算
     */
    public boolean setIfAbsent(String key, String value, long time) {
        return Boolean.TRUE.equals(
                stringRedisTemplate
                        .opsForValue()
                        .setIfAbsent(key, value, time, TimeUnit.MINUTES)
        );
    }

    /**
     * 通过索引获取redis里面的数据
     */
    public List rang(String key, long start, long end) {
        return stringRedisTemplate.opsForList().range(key, start, end);
    }

    /**
     * String 转换成 javaBean 使用完 get 返回 String 可使用此方法转换 javaBean
     */
    public Object stringToBean(String str, Class<?> t) throws JsonProcessingException {
        if (StringUtils.isEmpty(str)) {
            return null;
        }
        //忽略大小写
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
        return objectMapper.readValue(JSON.parse(str).toString(), t);
    }


    /**
     * javaBean转String
     */
    public String beanToString(Object obj) throws JsonProcessingException {
        return objectMapper.writeValueAsString(obj);
    }
}

发表评论