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,直接是实现接口
@Service
public 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)
@SpringBootTest
public 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对象)