redis缓存工具类(Java)

redis常用方法

java 复制代码
package com.guodi.assets.common.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @description:
 * @author: weihao liang
 * @create: 2024-06-15 13:56
 **/
@Service
public class RedisHelper<T> {

    @Autowired
    public RedisTemplate redisTemplate;

    /**
     * 缓存基本的对象,Integer、String、实体类等
     *
     * @param key   缓存的键值
     * @param value 缓存的值
     * @return 缓存的对象
     */
    public <T> ValueOperations<String, T> setCacheObject(String key, T value) {
        System.out.println(key + "*****" + value.toString());
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        operation.set(key, value);
        return operation;
    }

    /**
     * 缓存基本的对象,Integer、String、实体类等
     *
     * @param key     缓存的键值
     * @param value   缓存的值
     * @param timeout 超时时间(秒)
     * @return 缓存的对象
     */
    public <T> ValueOperations<String, T> setCacheObjectAndtimeout(String key, T value, long timeout) {
        System.out.println(key + "*****" + value.toString());
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        operation.set(key, value, timeout, TimeUnit.SECONDS);
        return operation;
    }

    /**
     * 获得缓存的基本对象。
     *
     * @param key 缓存键值
     * @return 缓存键值对应的数据
     */
    public <T> T getCacheObject(String key/*,ValueOperations<String,T> operation*/) {
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        return operation.get(key);
    }

    /**
     * 缓存List数据
     *
     * @param key      缓存的键值
     * @param dataList 待缓存的List数据
     * @return 缓存的对象
     */
    public <T> ListOperations<String, T> setCacheList(String key, List<T> dataList) {
        ListOperations listOperation = redisTemplate.opsForList();
        if (null != dataList) {
            int size = dataList.size();
            for (int i = 0; i < size; i++) {

                listOperation.rightPush(key, dataList.get(i));
            }
        }

        return listOperation;
    }

    /**
     * 获得缓存的list对象
     *
     * @param key 缓存的键值
     * @return 缓存键值对应的数据
     */
    public <T> List<T> getCacheList(String key) {
        List<T> dataList = new ArrayList<T>();
        ListOperations<String, T> listOperation = redisTemplate.opsForList();
        Long size = listOperation.size(key);

        for (int i = 0; i < size; i++) {
            dataList.add((T) listOperation.leftPop(key));
        }

        return dataList;
    }

    /**
     * 缓存Set
     *
     * @param key     缓存键值
     * @param dataSet 缓存的数据
     * @return 缓存数据的对象
     */
    public <T> BoundSetOperations<String, T> setCacheSet(String key, Set<T> dataSet) {
        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
      /*T[] t = (T[]) dataSet.toArray();
        setOperation.add(t);*/


        Iterator<T> it = dataSet.iterator();
        while (it.hasNext()) {
            setOperation.add(it.next());
        }

        return setOperation;
    }

    /**
     * 获得缓存的set
     *
     * @param key
     * @return
     */
    public Set<T> getCacheSet(String key/*,BoundSetOperations<String,T> operation*/) {
        Set<T> dataSet = new HashSet<T>();
        BoundSetOperations<String, T> operation = redisTemplate.boundSetOps(key);

        Long size = operation.size();
        for (int i = 0; i < size; i++) {
            dataSet.add(operation.pop());
        }
        return dataSet;
    }

    /**
     * 缓存Map
     *
     * @param key
     * @param dataMap
     * @return
     */
    public <T> HashOperations<String, String, T> setCacheMap(String key, Map<String, T> dataMap) {

        HashOperations hashOperations = redisTemplate.opsForHash();
        if (null != dataMap) {

            for (Map.Entry<String, T> entry : dataMap.entrySet()) {

                /*System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); */
                hashOperations.put(key, entry.getKey(), entry.getValue());
            }

        }

        return hashOperations;
    }

    /**
     * 获得缓存的Map
     *
     * @param key
     * @return
     */
    public <T> Map<String, T> getCacheMap(String key/*,HashOperations<String,String,T> hashOperation*/) {
        Map<String, T> map = redisTemplate.opsForHash().entries(key);
        /*Map<String, T> map = hashOperation.entries(key);*/
        return map;
    }

    /**
     * 缓存Map
     *
     * @param key
     * @param dataMap
     * @return
     */
    public <T> HashOperations<String, Integer, T> setCacheIntegerMap(String key, Map<Integer, T> dataMap) {
        HashOperations hashOperations = redisTemplate.opsForHash();
        if (null != dataMap) {

            for (Map.Entry<Integer, T> entry : dataMap.entrySet()) {

                /*System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); */
                hashOperations.put(key, entry.getKey(), entry.getValue());
            }

        }

        return hashOperations;
    }

    /**
     * 获得缓存的Map
     *
     * @param key
     * @return
     */
    public <T> Map<Integer, T> getCacheIntegerMap(String key/*,HashOperations<String,String,T> hashOperation*/) {
        Map<Integer, T> map = redisTemplate.opsForHash().entries(key);
        /*Map<String, T> map = hashOperation.entries(key);*/
        return map;
    }

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

    /**
     * 删除多个key
     *
     * @param keys
     */
    public void deleteKey(String... keys) {
        Set<String> kSet = Stream.of(keys).map(k -> k).collect(Collectors.toSet());
        redisTemplate.delete(kSet);
    }

    /**
     * 删除Key的集合
     *
     * @param keys
     */
    public void deleteKey(Collection<String> keys) {
        Set<String> kSet = keys.stream().map(k -> k).collect(Collectors.toSet());
        redisTemplate.delete(kSet);
    }

    /**
     * 模糊删除key
     *
     * @param pattern
     */
    public void deleteKeysByPattern(String pattern) {
        Set<String> keys = redisTemplate.keys(pattern);
        redisTemplate.delete(keys);
    }

}

删除缓存

java 复制代码
package com.guodi.assets.map.controller;

import com.guodi.assets.common.utils.RedisHelper;
import com.guodi.core.tool.api.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @description: redis接口用于清理缓存
 * @author: weihao liang
 * @create: 2024-08-13 08:38
 **/
@RestController
@RequestMapping("/mapRedis")
@Api(value = "redis接口用于清理缓存", tags = "redis接口用于清理缓存")
public class MapRedisController {
    @Autowired
    RedisHelper redisHelper;

    @ApiOperation(value = "清除页面统计缓存")
    @GetMapping(value = "/deleteRedis")
    @ResponseBody
    public R refreshRedis() {
        try {
            redisHelper.deleteKeysByPattern("cache_*");
        } catch (RuntimeException e) {
            e.printStackTrace();
            return R.success("服务器刷新失败!");
        }
        return R.success("服务器内存刷新成功!");
    }

}

如何使用例子

  • 返回参数为list
java 复制代码
List result = new LinkedList<>();

result= JSONArray.parseArray(redisHelper.getCacheObject(rediskey).toString(), JSONObject.class);
  • 返回参数为string
java 复制代码
String analysisRes = null;

String key = "cache" + "_" + operation + "_" + districtCode + "_" + fromYear + "_" + toYear + "_" + item + "_" + subItem;
            if (redisHelper.getCacheObject(key) == null) {
                // 土地SOE接口调用
                String url = getSoeUrl() + "/TendencyStatistics?operation=" + operation + "&districtcode=" + districtCode
                        + "&fromYear=" + fromYear + "&toYear=" + toYear + "&item=" + item + "&subItem="
                        + subItem + "&f=pjson";
                analysisRes = HttpUtil.get(url, -1);
                redisHelper.setCacheObject(key, analysisRes);
            } else {
                analysisRes = redisHelper.getCacheObject(key).toString();
            }
  • 返回参数为对象实体
java 复制代码
List<PriceShow> priceShows = new ArrayList<>();

priceShows = JSON.parseArray(redisHelper.getCacheObject(rediskey).toString(), PriceShow.class);
相关推荐
C++业余爱好者1 分钟前
.NET线程池ThreadPool.QueueUserWorkItem
java·数据库·.net
.豆鲨包3 分钟前
【Android】Android内存缓存LruCache与DiskLruCache的使用及实现原理
android·java·缓存
superlls4 分钟前
(Java基础)集合框架继承体系
java·开发语言
宋哈哈9 分钟前
页面水印sdk源码
java·前端·javascript
你不是我我34 分钟前
【Java 开发日记】我们来说一下 Mybatis 的缓存机制
java·spring·mybatis
咪咪渝粮38 分钟前
112.路径总和
java·数据结构·算法
WKP941839 分钟前
原型设计模式
java·设计模式
笃行客从不躺平40 分钟前
SQL 注入复习
java·数据库·sql
爬山算法42 分钟前
Redis(115)Redis的性能优化有哪些方法?
数据库·redis·性能优化
小毅&Nora1 小时前
【后端】使用 Easy Rules 构建灵活的业务规则引擎 — Spring Boot 集成实践
java·spring boot·后端