一:准备工作
1.导入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置yaml文件
spring:
datasource:
url: jdbc:mysql://localhost:3306/mylove?serverTimezone=GMT-8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
redis:
database: 0
host: 127.0.0.1
port: 6379
jedis:
pool:
max-wait: 1000ms
max-active: 8
min-idle: 5
max-idle: 8
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
二.工具类redis操作类
1.jedis链接类
@Configuration
//链接redis 获取appliaction.yml 里的数据以spring.redis开头的方式
@ConfigurationProperties(prefix = "spring.redis")
public class JedisUtil {
//属性名字和配置文件中必须一致,还要提供get和set方法
private String host; //读取到spring.redis.hostg.redis.port
private int port;//sprin
@Bean
public JedisPool jedisPool(){
JedisPool jedisPool = new JedisPool(host,port);
System.out.println("已连接:"+host+"上的redis,端口号为:"+port);
return jedisPool;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}
2.json转化工具类
@Component
public class JsonUtils {
// 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper();
/**
* 将对象转换成json字符串。
* <p>Title: pojoToJson</p>
* <p>Description: </p>
* @param data
* @return
*/
public static String objectToJson(Object data) {
try {
String string = MAPPER.writeValueAsString(data);
return string;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
/**
* 将json结果集转化为对象
*
* @param jsonData json数据
* @param class 对象中的object类型
* @return
*/
public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
try {
T t = MAPPER.readValue(jsonData, beanType);
return t;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将json数据转换成pojo对象list
* <p>Title: jsonToList</p>
* <p>Description: </p>
* @param jsonData
* @param beanType
* @return
*/
public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
try {
List<T> list = MAPPER.readValue(jsonData, javaType);
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
3.redis操作类
@Service
public class RedisServiceImpl implements redisDao {
@Autowired
private JedisPool jedisPool;
/**
* 查询key的value值
* @param key
* @return
*/
@Override
public String getValue(String key) {
//连接redis
Jedis jedis = jedisPool.getResource();
//操作redis
String s = jedis.get(key);
//关闭连接
jedis.close();
return s;
}
/**
* 删除redis里的key-value值
*
* @param key String
* @return long
*/
@Override
public Long delValue(String key) {
//连接redis
Jedis jedis = jedisPool.getResource();
//操作redis
Long del = jedis.del(key);
//关闭连接
jedis.close();
return del;
}
@Override
public String setValue(String key, String val) {
//连接redis
Jedis jedis = jedisPool.getResource();
//操作redis
String s = jedis.set(key, val);
//关闭连接
jedis.close();
return s;
}
@Override
public Long expire(String key, int seconds) {
//连接redis
Jedis jedis = jedisPool.getResource();
//操作redis
Long aLong = jedis.expire(key, seconds);
//关闭连接
jedis.close();
return aLong;
}
}
三:编写service层代码
@Service
public class goodsServiceImpl extends ServiceImpl<GoodsMapper,goods> implements goodsService {
@Autowired
RedisServiceImpl redisServiceImpl;
@Autowired
GoodsMapper goodsMapper;
@Autowired
com.yq.mapper.typeMapper typeMapper;
int i=0;
/**
* 查询出所有信息,并将数据缓存到redis中
* @return goods类型所有数据
*/
@Override
public List<goods> findListGood() {
String list = redisServiceImpl.getValue("goodList");
if (list == null) {
List<com.yq.entry.goods> goods = goodsMapper.selectList(null);
redisServiceImpl.setValue("goodList", JsonUtils.objectToJson(goods));
return goods;
}
return JsonUtils.jsonToList(list, goods.class);
}
/**
* goods并缓存数据
*
* @param
* @return int
*/
@Override
public int addGoods(goods io) {
String name = io.getName();
String value = redisServiceImpl.getValue(name);
if (value == null) {
redisServiceImpl.setValue(name, JsonUtils.objectToJson(io));//向redis里添加新增数据
}
return 1;
}
/**
* 类型信息,缓存到redis中
* @return list<type>
*/
@Override
public List<types> getType() {
String list = redisServiceImpl.getValue("typeList");
if (list == null) {
List<types> types = typeMapper.selectList(null);
redisServiceImpl.setValue("typeList", JsonUtils.objectToJson(types));
return types;
}
return JsonUtils.jsonToList(list, types.class);
}
/**
* 更新信息
* @param good 物品信息
* @return int
*/
@Override
public int updateGoods(goods good) {
redisServiceImpl.delValue("typeList");
redisServiceImpl.delValue("goodList");
return goodsMapper.updateById(good);
}
/**
* 根据id查询物品信息
* @param id 物品id
* @return 物品对象
*/
@Override
public goods findByIdGoods(int id) {
QueryWrapper<com.yq.entry.goods> qw = new QueryWrapper();
qw.eq("id", id);
return goodsMapper.selectOne(qw);
}
/**
* 删除信息并备份信息
* @param id 物品id
* @return int
*/
@Override
public int delGoods(int id) {
goods goods = goodsMapper.selectById(id);
QueryWrapper<goods> ww = new QueryWrapper<>();
ww.eq("id", id);
int i = goodsMapper.delete(ww);
if (i >= 1) {
redisServiceImpl.delValue("goodList");
//如果删除成功,则把信息存放到redis中
redisServiceImpl.setValue("delGoods",JsonUtils.objectToJson(goods));
//查看是否还有相同类型的物品
QueryWrapper<goods> qw = new QueryWrapper<>();
qw.eq("type", goods.getType());
List<goods> list = goodsMapper.selectList(qw);
//如果没有,则删除类型表里的该这段
if (list == null) {
QueryWrapper<types> qw1 = new QueryWrapper<>();
qw1.eq("id", goods.getType());
int i1 = typeMapper.delete(qw1);
return 2;
} else {
return 1;
}
}
return 0;
}
/**
* 还原上次删除操作
* @return
*/
@Override
public int withdrawByGoods() {
String goods = redisServiceImpl.getValue("delGoods");
if (goods!=null){
goods o = JsonUtils.jsonToPojo(goods, goods.class);
redisServiceImpl.delValue("goodList");
int i = goodsMapper.insert(o);
redisServiceImpl.delValue("delGoods");
}
return 0;
}
@Override
public int addRedis(goods goods) {
redisServiceImpl.setValue(i+"",JsonUtils.objectToJson(goods));
System.out.println(i+" <================");
return i++;
}
@Override
public int addAllRedis() {
String value = redisServiceImpl.getValue(i + "");
System.out.println(value+"<===============");
for (int j = 0; j <3 ; j++) {
goods goods1 = JsonUtils.jsonToPojo( redisServiceImpl.getValue(j + ""), goods.class);
goodsMapper.insert(goods1);
redisServiceImpl.delValue(j+"");
}
redisServiceImpl.delValue("goodList");
return 1;
}