一、应用场景
Redis缓存系统中使用Json字符串中存储一些缓存信息,减少数据库压力。但是数据库可能会定时更新,数据库只有只读权限,没法知道哪些数据库更新了,一种解决方案:定期遍历数据库数据,覆盖缓存,特点是快,缺点是没法知道哪些数据更新了 第二种解决方案:数据库中遍历的值和缓存系统的值进行比较,记录变化数据,此时可以使用数据库作为外层循环或者使用缓存系统作为外层循环,缺点是慢,优点是知道用户何时更新了哪些数据。
中心思想:比较VO转为的Json字符串中的值和对象中的值是否一致,不一致则更新Json字符串的值。
二、源代码
package demo.tt.p002;
import java.lang.reflect.Field;
import org.json.JSONObject;
import demo.tt.UserVO;
public class Demo {
/**
*
* <!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160212</version>
</dependency>
* 知识点:
* 1)字符串转Json对象
* 2)遍历对象的值
*
* 应用:比较Json字符串中的值和对象中的值是否一致,不一致则更新
* @param args
* @throws IllegalAccessException
* @throws IllegalArgumentException
* @author gaojingsong
*/
public static void main(String[] args) throws Exception {
UserVO vo = new UserVO();
vo.setName("gaojs");
vo.setAge(27);
vo.setId(200808512);
//VO对象转Json对象
JSONObject json = new JSONObject(vo);
System.out.println(json);
//字符创对象转Json对象
String str ="{\"id\":200808512,\"name\":\"gaojs\",\"age\":27,\"create_time\":\"20160722\"} ";
JSONObject json1 = new JSONObject(str);
System.out.println(json1);
System.out.println("--------反射的执行----------");
Class c = vo.getClass();
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
Object obj = field.get(vo);
System.out.println(obj +", json1 "+json1.get(name));
}
}
}
三、验证