1. POJO를 캐시에 저장해야 합니다. 클래스는 다음과 같이 정의됩니다.
public class TestPOJO implements Serializable { private String testStatus; private String userPin; private String investor; private Date testQueryTime; private Date createTime; private String bizInfo; private Date otherTime; private BigDecimal userAmount; private BigDecimal userRate; private BigDecimal applyAmount; private String type; private String checkTime; private String preTestStatus; public Object[] toValueArray(){ Object[] array = {testStatus, userPin, investor, testQueryTime, createTime, bizInfo, otherTime, userAmount, userRate, applyAmount, type, checkTime, preTestStatus}; return array; } public CreditRecord fromValueArray(Object[] valueArray){ //具体的数据类型会丢失,需要做处理 } }
2. 다음 예제를 테스트 데이터로 사용하세요
TestPOJO pojo = new TestPOJO(); pojo.setApplyAmount(new BigDecimal("200.11")); pojo.setBizInfo("XX"); pojo.setUserAmount(new BigDecimal("1000.00")); pojo.setTestStatus("SUCCESS"); pojo.setCheckTime("2023-02-02"); pojo.setInvestor("ABCD"); pojo.setUserRate(new BigDecimal("0.002")); pojo.setTestQueryTime(new Date()); pojo.setOtherTime(new Date()); pojo.setPreTestStatus("PROCESSING"); pojo.setUserPin("ABCDEFGHIJ"); pojo.setType("Y");
{"applyAmount":200.11,"bizInfo":"XX", "checkTime":"2023-02-02","투자자":"ABCD","otherTime":"2023-04-10 17:45:17.717","preCheckStatus":"PROCESSING","testQueryTime":" 2023- 04-10 17:45:17.717","testStatus":"SUCCESS","type":"Y","userAmount":1000.00,"userPin":"ABCDEFGHIJ","userRate":0.002}
우리는 위의 내용에 쓸모없는 데이터가 많이 포함되어 있으며 속성 이름을 저장할 필요가 없다는 것을 발견했습니다.개선 1 - 속성 이름 제거
System.out.println(JSON.toJSONString(pojo).length());
["SUCCESS ","ABCDEFGHIJ","ABCD","2023-04-10 17:45:17.717",null,"XX","2023-04-10 17:45:17.717", 1000.00,0.002,200.11,"Y","2023-02-02","PROCESSING"]
시간 형식이 문자열로 직렬화되어 데이터가 발생하는 것을 발견했습니다. 확장되므로 더 나은 직렬화 도구를 사용해야 합니다.개선 2 - 더 나은 직렬화 도구 사용
System.out.println(JSON.toJSONString(pojo.toValueArray()).length());
개선 3 - 최적화된 데이터 유형
//我们仍然选取JSON格式,但使用了第三方序列化工具 System.out.println(new ObjectMapper(new MessagePackFactory()).writeValueAsBytes(pojo.toValueArray()).length);
length=69
개선 4-ZIP 압축 고려
최종 구현됨
public Object[] toValueArray(){ Object[] array = {toInt(testStatus), userPin, toInt(investor), testQueryTime, createTime, bizInfo, otherTime, userAmount, userRate, applyAmount, type, toLong(checkTime), toInt(preTestStatus)}; return array; }
<dependency> <groupId>org.msgpack</groupId> <artifactId>msgpack-core</artifactId> <version>0.9.3</version> </dependency>
Scenario 확장
위의 경우에는 간단한 코드 몇 줄만으로 공간을 70% 이상 줄일 수 있습니다. 의 적극 권장됩니다. :
• 객체 대신 배열을 사용하세요(많은 수의 필드가 비어 있으면 직렬화 도구를 사용하여 null을 압축해야 함)
• 더 나은 직렬화 도구를 사용하세요.
• ZIP 압축 사용
• 해시 구조 대신 목록 사용(비어 있는 필드가 많은 경우 테스트 및 비교 필요)
위 내용은 Redis 캐시 공간을 최적화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!