前言:最近新项目准备用 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/p/9613343.html
相关资源:JAVA上百实例源码以及开源项目