Golang使用gzip压缩字符减少redis等存储占用的实现

Florence ·
更新时间:2024-11-01
· 1573 次阅读

本文主要介绍了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压缩减少存储占用内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



字符 Redis golang gzip 存储

需要 登录 后方可回复, 如果你还没有账号请 注册新账号