Redis实现存取数据+数据存取

柔情痞子 提交于 2020-02-23 05:45:53

添加依赖:

 

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.7</version>
</dependency>

 <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.1.3.RELEASE</version>
 </de

 

 

Mapper接口:

package com.nf147.sim.mapper;

import com.nf147.sim.entity.News;

import java.util.List;

public interface NewsMapper {
    List<News> query();
    void add(News news);
}

 

 

映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nf147.sim.mapper.NewsMapper">

    <resultMap id="BaseResultMap" type="com.nf147.sim.entity.News">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="title" jdbcType="VARCHAR" property="title" />
        <result column="body" jdbcType="VARCHAR" property="body" />
    </resultMap>

    <select id="query" resultType="com.nf147.sim.entity.News">
        select id ,title,body from news
    </select>

    <select id="selectAll" resultType="com.nf147.sim.entity.News">
          select id ,title,body from news
    </select>

    <insert id="add" keyProperty="id" useGeneratedKeys="true">
        insert into news (title,body) values (#{title},#{body})
    </insert>

</mapper>

 

服务接口:

package com.nf147.sim.service;

import com.nf147.sim.entity.News;
import redis.clients.jedis.Jedis;

import java.io.IOException;
import java.util.List;

public interface NewsService {
    List<News> selectAll() throws IOException;void add (News news);
}

 

实现:

package com.nf147.sim.service.impl;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.nf147.sim.entity.News;
import com.nf147.sim.mapper.NewsMapper;
import com.nf147.sim.service.NewsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

import java.io.IOException;
import java.util.List;

@Service
public class NewsServiceImpl implements NewsService {

    @Autowired
    private NewsMapper mapper;

    @Override
        public List<News> selectAll() throws IOException {

            Jedis jedis =new Jedis();
            String key = "listNews";

            ObjectMapper on = new ObjectMapper();  //josn

        if (jedis.exists(key)){                //判断缓存有没有存在key
            System.out.println("从缓存中取出数据...");
            return on.readValue(jedis.get(key),new TypeReference<List<News>>(){});  //如果有就从缓存里面取数据
        }     //没有则从数据库去取
        List<News> news = mapper.query();
        jedis.set(key,on.writeValueAsString(news));  //然后设置键和数据
        return news;                                //返回
    }

    @Override
    public void add(News news) {  //每次添加时判短键是否存在,如果存在首先删除
        Jedis jedis = new Jedis();
        String key="listNews";
        if(jedis.exists(key))
            jedis.del(key);
        mapper.add(news);
    }


}

 

测试:

package com.nf147.sim.service.impl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.nf147.sim.configuration.RootConfig;
import com.nf147.sim.entity.News;
import com.nf147.sim.mapper.NewsMapper;
import com.nf147.sim.service.NewsService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import redis.clients.jedis.Jedis;

import java.io.*;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


@RunWith(SpringRunner.class)
@ContextConfiguration(classes = RootConfig.class)
public class NewsServiceImplTest {

    @Autowired
    private NewsServiceImpl NewsServiceImpl;

    @Test
    public void selectAll() throws IOException {
        List<News> news = NewsServiceImpl.selectAll();
        System.out.println(news);
    }
    }
}

 

结果:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!