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 客户端工具自行查看 自己保存的数据。