Spring + redis 3、缓存代码实现(利用SpringBootTest做测试)

来源:互联网 发布:大掌柜软件使用教程 编辑:程序博客网 时间:2024/06/16 12:55

1、首先生成一个实体类user

public class User implements Serializable {    private  String userName;    private  String userCode;    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getUserCode() {        return userCode;    }    public void setUserCode(String userCode) {        this.userCode = userCode;    }    @Override    public String toString() {        return "User{" +                "userName='" + userName + '\'' +                ", userCode='" + userCode + '\'' +                '}';    }}

因为简略实现,所以没有service,直接是实现接口

@Servicepublic class UserService {    @Cacheable(value = "getUser",keyGenerator  = "cacheKeyGenerator")    public User getUser(String userName){        System.out.println("正在查询数据库");        User user = new User();        user.setUserCode("2222");        user.setUserName(userName);        return user;    }//    @CachePut(value = "getUser",key = "#userName")    @CachePut(value = "getUser",keyGenerator  = "cacheKeyGenerator")    public User updateUser(String userName){        System.out.println("正在设置数据库");        System.out.println(userName);        User user = new User();        user.setUserCode("323");        user.setUserName(userName);        return user;    }}

测试类

@RunWith(SpringRunner.class)@SpringBootTestpublic class DemoApplicationTests {    @Autowired    private StringRedisTemplate stringRedisTemplate;    @Autowired    private UserService userService;    @Test    public void contextLoads() {    }    @Test    public void TestRedis(){        ValueOperations<String, String> stringStringValueOperations = stringRedisTemplate.opsForValue();        stringStringValueOperations.set("testRedis","zzzz");    }    @Test    public void TestGetRedis(){        ValueOperations<String, String> stringStringValueOperations = stringRedisTemplate.opsForValue();        String s = stringStringValueOperations.get("testRedis");        System.out.print(s);    }    @Test    public void TestSql(){        Driver driver = new Driver();        Properties props = new Properties();        InputStream input = null;        try {            input = new FileInputStream("application.properties");//加载Java项目根路径下的配置文件.            props.load(input);// 加载属性文件            Connection connect = driver.connect("jdbc:postgresql://XXX:5432/XXX", props);            Statement statement = connect.createStatement();            statement.execute("SELECT * FROM ccs_sms");            ResultSet resultSet = statement.getResultSet();            while(resultSet.next()){                String title = resultSet.getString("title");                System.out.println(title);            }        } catch (Exception e) {            e.printStackTrace();        }    }    @Test    public void testGetUser(){        User user = userService.getUser("linjiayong12");        System.out.println(user.toString());        User user1 = userService.getUser("linjiayong12");        System.out.println(user1.toString());    }    @Test    public void testUpdateUser(){     userService.updateUser("linjiayong12");    }}

未运行testGetUser时、redis缓存如下
这里写图片描述

在第一次测试testGetUser时
这里写图片描述
第一次getuser时做了查询数据库操作,第二次访问通过注解 @Cacheable(value = “getUser”,keyGenerator = “cacheKeyGenerator”)将存在redis中的缓存取出
redis-keys缓存如下(Cacheable参数value参数就是存放在redis中zset的key(getUser~keys)keyGenerator 是key策略生成器,与前面文章中实现的RedisConfiguration的cacheKeyGenerator一致)
这里写图片描述
缓存的数据如下(在序列化中使用了是json序列化操作,将会生成一个json对象)
这里写图片描述