本文主要介绍了Golang使用gzip压缩字符减少redis等存储占用的实现,分享给大家,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
package compression import ( "bytes" "compress/gzip" "encoding/json" ) func GzipEncode(input [] byte ) ([] byte , error ) { // 创建一个新的 byte 输出流 var buf bytes.Buffer // 创建一个新的 gzip 输出流 //NoCompression = flate.NoCompression // 不压缩 //BestSpeed = flate.BestSpeed // 最快速度 //BestCompression = flate.BestCompression // 最佳压缩比 //DefaultCompression = flate.DefaultCompression // 默认压缩比 //gzip.NewWriterLevel() gzipWriter := gzip.NewWriter(&buf) // 将 input byte 数组写入到此输出流中 _, err := gzipWriter.Write(input) if err != nil { _ = gzipWriter. Close () return nil , err } if err := gzipWriter. Close (); err != nil { return nil , err } // 返回压缩后的 bytes 数组 return buf.Bytes(), nil } func GzipDecode(input [] byte ) ([] byte , error ) { // 创建一个新的 gzip.Reader bytesReader := bytes.NewReader(input) gzipReader, err := gzip.NewReader(bytesReader) if err != nil { return nil , err } defer func () { // defer 中关闭 gzipReader _ = gzipReader. Close () }() buf := new (bytes.Buffer) // 从 Reader 中读取出数据 if _, err := buf.ReadFrom(gzipReader); err != nil { return nil , err } return buf.Bytes(), nil } // 压缩 func MarshalJsonAndGzip(data interface {}) ([] byte , error ) { marshalData, err := json.Marshal(data) if err != nil { return nil , err } gzipData, err := GzipEncode(marshalData) if err != nil { return nil , err } return gzipData, err } // 解压 func UnmarshalDataFromJsonWithGzip(input [] byte , output interface {}) error { decodeData, err := GzipDecode(input) if err != nil { return err } err = json.Unmarshal(decodeData, output) if err != nil { return err } return nil } |
到此这篇关于Golang使用gzip压缩字符减少redis等存储占用的实现的文章就介绍到这了,更多相关Golang gzip压缩减少存储占用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/yonggeit/article/details/125743336