Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Redis Serialization và Deserialization

nguyên nhân nào gây ra sự cố deserialization?

Tôi muốn cung cấp cho bạn một chút thông tin cơ bản trước khi trả lời câu hỏi của bạn,

Thời gian chạy tuần tự hóa liên kết với mỗi lớp có thể tuần tự hóa một số phiên bản, được gọi là serialVersionUID, được sử dụng trong quá trình giải tuần tự hóa để xác minh rằng người gửi và người nhận của một đối tượng được tuần tự hóa đã tải các lớp cho đối tượng đó tương thích với quá trình tuần tự hóa. Nếu người nhận đã tải một lớp cho đối tượng có serialVersionUID khác với lớp của người gửi tương ứng, thì quá trình giải mã hóa sẽ dẫn đến không hợp lệ.

Nếu một lớp có thể tuần tự hóa không khai báo rõ ràng một serialVersionUID, thì thời gian chạy tuần tự hóa sẽ tính toán một giá trị serialVersionUID mặc định cho lớp đó dựa trên các khía cạnh khác nhau của lớp, Nó sử dụng thông tin sau của lớp để tính SerialVersionUID,

  1. Tên lớp học.
  2. Các công cụ sửa đổi lớp được viết dưới dạng số nguyên 32 bit.
  3. Tên của mỗi giao diện được sắp xếp theo tên.
  4. Đối với mỗi trường của lớp được sắp xếp theo tên trường (ngoại trừ các trường tạm thời tĩnh và riêng tư:
  5. Tên của trường.
  6. Các công cụ sửa đổi của trường được viết dưới dạng số nguyên 32 bit.
  7. Bộ mô tả của trường.
  8. nếu trình khởi tạo lớp tồn tại, hãy viết ra như sau:

    Tên của phương pháp,.

    Công cụ sửa đổi của phương thức, java.lang.reflect.Modifier.STATIC, được viết dưới dạng số nguyên 32 bit.

    Bộ mô tả của phương thức, () V.

  9. Đối với mỗi phương thức khởi tạo không riêng tư được sắp xếp theo tên phương thức và chữ ký:

    Tên của phương pháp,.

    Các sửa đổi của phương thức được viết dưới dạng số nguyên 32 bit.

    Bộ mô tả của phương pháp.

  10. Đối với mỗi phương thức không riêng tư được sắp xếp theo tên phương thức và chữ ký:

    Tên của phương pháp.

    Các sửa đổi của phương thức được viết dưới dạng số nguyên 32 bit.

    Bộ mô tả của phương pháp.

Vì vậy, để trả lời câu hỏi của bạn,

Việc xóa tài sản công / tư có gây ra sự cố không? Thêm thuộc tính mới, có lẽ? Việc thêm một hàm mới vào lớp có tạo ra vấn đề không? Làm thế nào về các trình xây dựng khác?

Có, tất cả những bổ sung / xóa này theo mặc định sẽ gây ra sự cố.

Nhưng một cách để khắc phục điều này là xác định rõ ràng SerialVersionUID, điều này sẽ cho hệ thống tuần tự hóa rằng tôi biết lớp sẽ phát triển (hoặc phát triển) theo thời gian và không gặp lỗi. Vì vậy, hệ thống hủy tuần tự hóa chỉ đọc những trường có ở cả hai bên và chỉ định giá trị. Các trường mới được thêm vào phía hủy tuần tự hóa sẽ nhận các giá trị mặc định. Nếu một số trường bị xóa ở phía hủy tuần tự hóa, thuật toán chỉ đọc và bỏ qua.

Sau đây là cách người ta có thể khai báo SerialVersionUID,

private static final long serialVersionUID = 3487495895819393L;



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chúng ta có thể tham gia Redis không?

  2. redis scan trả về kết quả trống nhưng không phải con trỏ

  3. Làm thế nào để tìm kiếm một mẫu khóa trong redis hash?

  4. Tìm giá trị bằng cách sử dụng một phần tên khóa trong Tập hợp được sắp xếp của Redis

  5. Làm cách nào để gỡ lỗi lệnh OOM không được phép khi sử dụng bộ nhớ> 'maxmemory' trong Redis?