• springBoot 官方整合的redis 使用教程:(StringRedisTemplate 方式存储 Object类型value)


    前言:最近新项目准备用 redis 简单的缓存 一些查询信息,以便第二次查询效率高一点。

    项目框架:springBoot、java、maven 

    说明:edis存储的数据类型,key一般都是String,但是value可能不一样,一般有两种,String和 Object; 
    如果k-v都是String类型,我们可以直接用 StringRedisTemplate,这个是官方建议的,也是最方便的,直接导入即用,无需多余配置! 
    如果k-v是Object类型,则需要自定义 RedisTemplate

    但是本文 是采用 StringRedisTemplate 处理存储 Object类型。

    1、前期准备

      首先保证安装好redis(自己的 阿里云之类的服务器),并开启远程访问权限(最好配置密码)。

    打开 maven 的 pom.xml 添加以下内容:

    1、pom.xml 中添加 springBoot 官方整合的redis 依赖。
      <!--redis-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
          <version>2.0.4.RELEASE</version>
      </dependency>
     
     <!-- fastjson ,这个自行添加,处理json-->
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.49</version>
      </dependency>

    2、在springBoot的配置文件 application.yml 中添加 redis 信息

    application.yml 中配置
     spring:
       #redis
        redis:
          database: 7          // 使用redis的db7库
          host: 192.xxx.x.xxx    // redis 服务器地址
          port: 6379
          password:

    3、创建一个 StringRedisTemplate 方式实现的 redisUtil 类: 

    import com.alibaba.fastjson.JSONObject;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.stereotype.Component;
    import javax.annotation.Resource;
    import java.util.concurrent.TimeUnit;
    
    /**
     * @author 路飞
     * @date 2018-9-8
     * @description redis工具类
     */
    @Component
    public class RedisUtil {
    
        private final static Logger logger = LogManager.getLogger(RedisUtil.class);
    
        @Resource
        private StringRedisTemplate stringRedisTemplate;
    
        /**
         * @Author 路飞
         * @date 2018-09-08
         * @param key   redis的key
         * @param value object类型的value
         * @description 存储object类型数据
         */
        public boolean set(String key, Object value) {
            boolean result = false;
            try {
                // 使用 JSONObject.toJSONString() 处理要存储的数据
                stringRedisTemplate.opsForValue().set(key, JSONObject.toJSONString(value));
                result = true;
            } catch (Exception e) {
                logger.error("写入reids缓存失败! 错误信息为:", e);
            }
            return  result;
        }
    
        /**
         * @Author 路飞
         * @date 2018-09-08
         * @param key       redis的key
         * @param value     object类型的value
         * @param expire    存活时间(key有效时间)
         * @description     存储object类型数据
         */
        public boolean set(final String key, Object value, int expire) {
            boolean result = false;
            try {
                // 使用 JSONObject.toJSONString() 处理要存储的数据
                stringRedisTemplate.opsForValue().set(key, JSONObject.toJSONString(value), expire, TimeUnit.SECONDS);
                result = true;
            } catch (Exception e) {
                logger.error("写入reids缓存失败(存活时间)! 错误信息为:" + e.getMessage());
            }
            return result;
        }
    
    
        /**
         * @Author 路飞
         * @date 2018-09-08
         * @param key       redis的key
         * @description     根据key获取数据
         */
        public Object get(final String key) {
            Object result = null;
            try {
                 String valueStr = stringRedisTemplate.opsForValue().get(key);
                 if (!valueStr.isEmpty()) {
                     result = JSONObject.parseObject(valueStr, Object.class);
                 }
            } catch (Exception e) {
                logger.error("根据key获取数据失败!错误信息为: " + e.getMessage());
            }
            return result;
        }
    
        /**
         * @Author 路飞
         * @date 2018-09-08
         * @param key       redis的key
         * @description     判断key 是否存在
         */
        public boolean exists(final String key) {
            boolean result = false;
            try {
                result = stringRedisTemplate.hasKey(key);
            } catch (Exception e) {
                logger.error("判断redis中是否有对应key失败!错误信息为:" + e.getMessage());
            }
            return result;
        }
    
    
    }

    4 、用法举例:

     在某个serviceImpl中 测试:

    // 注入 RedisUtil 工具类
    @Resource
    private RedisUtil redisUtil;
    
    @Override
    public void test() {
        List<实体类> list = 获取数据;
        Map<String, Object> map = new HashMap<>();
        map.put("哈哈哈", "我是海贼王");
        map.put("dataList", list);
    
        Boolean setResult = redisUtil.set("测试key", map, 300); // 保存key,并设置有效时间300秒
    
        if(redisUtil.exists("测试key")) { // 判断key是否参在
    
            Object getValue = redisUtil.get("测试key"); // 根据key 获取Object类型数据
            System.out.println(getValue);
        }
    
    
    }

    5、使用 RedisDesktopManager 客户端工具自行查看 自己保存的数据。

     

    作者:橡胶果实 —— 要成为海贼王的少年

    出处:https://www.cnblogs.com/topfish/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    《Linux shell变量总结回顾》RHEL6(转)
    20个最受欢迎的Linux命令(转)
    如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(转)
    妻共贫贱难,夫共富贵难
    [置顶] 阅读Oracle官方文档指南
    Java实现 蓝桥杯 算法训练 递归求二项式系数
    Java实现 蓝桥杯 算法训练 数字三角形
    Java实现 蓝桥杯 算法训练 数字三角形
    Java实现 蓝桥杯 算法训练 数字三角形
    Java实现 蓝桥杯 算法训练 数字三角形
  • 原文地址:https://www.cnblogs.com/topfish/p/9613343.html
Copyright © 2020-2023  润新知