开发者

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   // 不压缩
 开发者_Js入门//BestSpeed     = flate.BestSpeed     // 最快速度
 //BestCompression  = flate.BestCompression  // 最佳压缩比
 //DefaultCompression = flate.DefaultCompression // 默认压缩比
 //gzip.NewWriterLevel()
 gzpythonipWriter := gzip.NeYUSzHejPwWriter(&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) (python[]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)
 i编程客栈f err != nil {
  return nil, err
 }
 return gzipData, err
}

// 解压
func UnmarshalDataFromJsonWithGzip(input []byte, output interface{}) error {
 decodeData, err := GzipDecode(input)
 if err != nil {
  return erpythonr
 }

 err = json.Unmarshal(decodeData, output)
 if err != nil {
  return err
 }
 return nil
}

到此这篇关于Golang使用gzip压缩字符减少redis等存储占用的实现的文章就介绍到这了,更多相关Golang gzip压缩减少存储占用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜