基本信息
文件名称:Golang使用gzip压缩字符减少redis等存储占用的实现.docx
文件大小:15.68 KB
总页数:3 页
更新时间:2025-05-21
总字数:约1.91千字
文档摘要

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

本文主要介绍了Golang使用gzip压缩字符减少redis等存储占用的实现,分享给大家,具体如下:

packagecompression

import(

???bytes

???compress/gzip

???encoding/json

funcGzipEncode(input[]byte)([]byte,error){

???//创建一个新的byte输出流

???varbufbytes.Buffer

???//创建一个新的gzip输出流

???//NoCompression???=flate.NoCompression???//不压缩

???//BestSpeed?????=flate.BestSpeed?????//最快速度

???//BestCompression??=flate.BestCompression??//最佳压缩比

???//DefaultCompression=flate.DefaultCompression//默认压缩比

???//gzip.NewWriterLevel()

???gzipWriter:=gzip.NewWriter(buf)

???//将inputbyte数组写入到此输出流中

???_,err:=gzipWriter.Write(input)

???iferr!=nil{

??????_=gzipWriter.Close()

??????returnnil,err

???}

???iferr:=gzipWriter.Close();err!=nil{

??????returnnil,err

???}

???//返回压缩后的bytes数组

???returnbuf.Bytes(),nil

funcGzipDecode(input[]byte)([]byte,error){

???//创建一个新的gzip.Reader

???bytesReader:=bytes.NewReader(input)

???gzipReader,err:=gzip.NewReader(bytesReader)

???iferr!=nil{

??????returnnil,err

???}

???deferfunc(){

??????//defer中关闭gzipReader

??????_=gzipReader.Close()

???}()

???buf:=new(bytes.Buffer)

???//从Reader中读取出数据

???if_,err:=buf.ReadFrom(gzipReader);err!=nil{

??????returnnil,err

???}

???returnbuf.Bytes(),nil

//压缩

funcMarshalJsonAndGzip(datainterface{})([]byte,error){

???marshalData,err:=json.Marshal(data)

???iferr!=nil{

??????returnnil,err

???}

???gzipData,err:=GzipEncode(marshalData)

???iferr!=nil{

??????returnnil,err

???}

???returngzipData,err

//解压

funcUnmarshalDataFromJsonWithGzip(input[]byte,outputinterface{})error{

???decodeData,err:=GzipDecode(input)

???iferr!=nil{

??????returnerr

???}

???err=json.Unmarshal(decodeData,output)

???iferr!=nil{

??????returnerr

???}

???returnnil

}