<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在Go中操作Redis服務(wù)

          共 3131字,需瀏覽 7分鐘

           ·

          2022-05-26 12:36

          本文將分享在Golang中如何操作Redis。文章中演示的組件庫為go-redis,本文會對該組件進行詳細的演示。

          go-redis

          go-redis是一個基于Golang語言的Redis客戶端組件。其功能也非常的強大與完善。支持如下功能。

          1. 1. ? Redis通用命令支持、各大數(shù)據(jù)類型支持。

          2. 2. ? Redis Cluster支持。

          3. 3. ? Redis Replication支持。

          4. 4. ? Redis Sentinel支持。

          5. 5. ? 支持管道、事務(wù)、發(fā)布/訂閱、Luau腳本、模擬和分布式鎖等。

          對應使用Golang操作Redis,另外還有一個組件,該組件相對go-redis有一些區(qū)別,2個項目之間的主要區(qū)別在于go-redis為每個Redis命令提供了類型安全的API。大致區(qū)別如下圖:

          ??

          使用演示

          首先在本地編譯安裝Redis服務(wù),這里可以根據(jù)自己的方式來進行安裝,只要能保證Redis可使用就行。

          //?解壓文件
          tar?-zxvf?redis-5.3.7.tgz

          //?編譯并安裝
          cd?redis-5.3.7?&&?make?&&?make?install

          //?配置Redis
          需要將redis.conf中的daemon?設(shè)置為yes?開啟守護進程模式運行。

          //?啟用Redis服務(wù)
          redis-server?./redis.conf

          接下來就可以正常操作Redis服務(wù)。

          配置Redis連接信息

          package?config

          import?(
          ????"time"

          ????"github.com/go-redis/redis/v8"
          )

          func?GetConnect()?*redis.Client?{
          ????return?redis.NewClient(&redis.Options{
          ????????Addr:????????"localhost:6379",?//?連接地址
          ????????Password:????"",???????????????//?密碼
          ????????DB:??????????0,????????????????//?數(shù)據(jù)庫編號
          ????????DialTimeout:?1?*?time.Second,??//?鏈接超時
          ????})
          }

          操作字符串

          result,?err?:=?config.GetConnect().Set(context.Background(),?"name",?time.Second,?time.Second*10).Result()
          if?err?!=?nil?{
          ??fmt.Println(err)
          ??return
          }
          fmt.Println(result)
          //?運行腳本
          ╰─?go?run?main.go
          redis服務(wù)連接成功
          OK

          操作List

          func?list()?{
          ????//?push數(shù)據(jù)
          ????result,?err?:=?config.GetConnect().LPush(context.Background(),?"list",?1).Result()
          ????if?err?!=?nil?{
          ????????fmt.Println(err)
          ????????return
          ????}
          ????fmt.Println(result)
          ????//?pop數(shù)據(jù)
          ????str,?err?:=?config.GetConnect().LPop(context.Background(),?"list").Result()
          ????if?err?!=?nil?{
          ????????fmt.Println(err)
          ????????return
          ????}
          ????fmt.Println(str)
          }
          //?運行腳本
          ╰─?go?run?main.go
          redis服務(wù)連接成功
          1
          1

          操作hash

          func?hash()?{
          ????//?單個添加
          ????//result,?err?:=?config.GetConnect().HSet(context.Background(),?"hash",?"key1",?"value1").Result()
          ????//?批量添加
          ????//result,?err?:=?config.GetConnect().HSet(context.Background(),?"hash",?"key1",?"value1",?"key2",?"value2").Result()
          ????//?使用切片
          ????//result,?err?:=?config.GetConnect().HSet(context.Background(),?"hash",?[]string{"key3",?"value3",?"key4",?"value4"}).Result()
          ????//?使用map
          ????hasMap?:=?make(map[string]string)
          ????hasMap["key5"]?=?"value5"
          ????hasMap["key6"]?=?"value6"
          ????result,?err?:=?config.GetConnect().HSet(context.Background(),?"hash",?hasMap).Result()
          ????if?err?!=?nil?{
          ????????fmt.Println(err)
          ????????return
          ????}
          ????fmt.Println(result)
          }

          限流

          go?get?github.com/go-redis/redis_rate/v9
          rdb?:=?redis.NewClient(&redis.Options{
          ????Addr:?"localhost:6379",
          })


          limiter?:=?redis_rate.NewLimiter(rdb)
          res,?err?:=?limiter.Allow(ctx,?"project:123",?redis_rate.PerSecond(10))
          if?err?!=?nil?{
          ????panic(err)
          }

          fmt.Println("allowed",?res.Allowed,?"remaining",?res.Remaining)

          布隆過濾器

          func?bloomFilter(ctx?context.Context,?rdb?*redis.Client)?{
          ????inserted,?err?:=?rdb.Do(ctx,?"BF.ADD",?"bf_key",?"item0").Bool()
          ????if?err?!=?nil?{
          ????????panic(err)
          ????}
          ????if?inserted?{
          ????????fmt.Println("item0?was?inserted")
          ????}

          ????for?_,?item?:=?range?[]string{"item0",?"item1"}?{
          ????????exists,?err?:=?rdb.Do(ctx,?"BF.EXISTS",?"bf_key",?item).Bool()
          ????????if?err?!=?nil?{
          ????????????panic(err)
          ????????}
          ????????if?exists?{
          ????????????fmt.Printf("%s?does?exist\n",?item)
          ????????}?else?{
          ????????????fmt.Printf("%s?does?not?exist\n",?item)
          ????????}
          ????}
          }


          瀏覽 85
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  三级片视频网站 | 日本无码少妇内谢视频 | 操逼无码1080p | 99无码国产成人精品视频 | 国产成人视频一区二区 |