Golang使用gzip压缩字符减少redis等存储占用的实现
更新时间:2023年01月31日 11:13:31 作者:少林码僧
本文主要介绍了Golang使用gzip压缩字符减少redis等存储占用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本文主要介绍了Golang使用gzip压缩字符减少redis等存储占用的实现,分享给大家,具体如下:
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压缩减少存储占用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Golang HTTP请求Json响应解析方法以及解读失败的原因
这篇文章主要介绍了Golang HTTP请求Json响应解析方法以及解读失败的原因,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-03-03Go语言中的空值(nil)与零值(zerovalue)区别详解
在Go语言中,空值(nil)和零值(zero value)是两个不同的概念,它们在语义、使用场景以及实际的编程实践中有着明显的区别,理解这两者的差异对于编写清晰、健壮的Go代码至关重要,需要的朋友可以参考下2024-06-06
最新评论