亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

在Golang中使用Redis的方法示例

2020-04-01 18:56:46
字體:
來源:轉載
供稿:網友

周五上班的主要任務是在公司老平臺上用redis處理一個隊列問題,順便復習了一下redis操作的基礎知識,回來后就想著在自己的博客demo里,用redis來優化一些使用場景,學習一下golang開發下redis的使用。

Redis簡單介紹

簡介

關于Redis的討論,其實在現在的后臺開發中已經是個老生常談的問題,基本上也是后端開發面試的基本考察點。其中 Redis的背景介紹和細節說明在這里就不贅述。不管怎么介紹,核心在于Redis是一個基于內存的key-value的多數據結構存儲,并可以提供持久化服務?;趦却娴奶匦詻Q定了Redis天然適合高并發的數據讀寫緩存優化,同時也帶來了內存開銷過大的問題。所以在一些特定情景下,Redis是一把無往不利的大殺器,值得深入學習。

學習Redis的一個難點或者說入門點,我個人感覺在于對象存儲理念的轉變。剛接觸 Redis 時,我剛從大學畢業,腦子里基本都是關系型數據存儲的理念,使用時總想著靠數據內的關系來建立數據之間的聯系,用起來很不順手。后來慢慢入門了才感受到了一些操作的好處。舉個栗子,比如查詢用戶在某個文章下的評論,用 sql 的思路就是搜索評論表里面用戶ID和文章ID匹配的數據,有時還需要聯合查詢出其他信息,但是如果是 Redis 操作,以'前綴:文章ID:用戶ID'為key,比如'comment:666:888'就可以快速取出用戶評論,十分方便。 Redis 的強大遠不僅如此,可以在實踐中慢慢體會。

主要數據結構

Redis主要有五種基本數據結構,滿足了絕大多數緩存結構的需要,如果你在使用一種結構存儲時感覺別扭時,很有可能是選錯了存儲結構,可以考慮一下其他結構的正確實現。

  1. String ,可以是字符串、整數和浮點數。如果是序列化數據,并涉及到修改操作的話,不推薦用 string ,可以考慮用 Hash
  2. Hash, key-value 對象,可以存放對象數據,比如用戶信息之類。
  3. List,有序數據集合,元素可以重復,用 LPUSH 、 LPOP 、 RPUSH 、 RPOP 等指令組合可以實現棧和隊列操作。
  4. Set,無序集合,元素唯一。
  5. Sorted Set,Sort的有序版,可以設定 Score 值來決定元素排序,適合用戶排名這樣的業務場景。

常見使用場景

  1. 高并發下數據緩存。 比如在某個場景下,大量日志同時寫入數據庫會給服務器帶來巨大壓力,這時可以先將數據寫入 redis 中,再由 redis 寫入數據庫,減輕同時寫入壓力。
  2. 熱點信息快速顯示。假設現在有一個新聞首頁,需要快速顯示各欄目前20條熱點新聞,如果直接查詢數據庫,在大量用戶同時訪問下,會消耗極大數量的數據庫請求。這時就可以用 redis 來優化,在新聞錄入的時候將標題、時間和來源寫入 redis 中,客戶端訪問時,可以從內存中一次性取出當天熱單新聞列表,極大地提高請求速度和節約了服務器開銷。
  3. 保存會話信息。可以將登錄后用戶信息緩存入 redis 并同時設置 key 過期時間,這樣后臺 api 過濾請求時,就可以從內存中讀取用戶信息,而且 redis 的過期機制,天然支持用戶身份有效期校驗,用起來十分方便。
  4. 統計計數。比如系統中常見一個功能是限制同一用戶固定時間段內的登錄次數或者所有請求次數,這時就可以以用戶id為key,次數值為value,將計數信息緩存起來,并且有 INCRBY 命令原生支持。
  5. 其他。Redis的應用場景十分廣發,隊列、發布訂閱、統計分析等等,可以看看其他文章的介紹說明。

Golang連接Redis

使用 Golang 開發的一大直觀感受就是,基本上你日常遇到的開發問題,都有官方或者第三方包幫你輔助實現,同時這些包都是開源的,只要你感興趣,都可以深入到包的內部實現去學習理解包的實現思路和方法。當然這也有利有弊,第三包的不穩定和質量參差不齊也增加了一些開發成本,目前還是感受利大于弊。研究好的包源碼實現,也是目前我的一個學習方向。

garyburd/redigo 包簡介

garyburd/redigo 包是網上很多博文都在推薦使用的一個高Star的 Redis 連接包,但是當我自己去 Github 的項目地址 garyburd/redigo 上查看 API 時,發現這個項目目前是歸檔狀態,項目已經遷移到了 gomodule/redigo ,同時包的獲取也理所當然地改成了 go get github.com/gomodule/redigo/redis ,這已經不是我第一次感受了第三方包的不穩定,之前用 dep 進行包管理時,就遇到過 dep 拉取的包版本和本地包版本 API 沖突的問題,這個有時間單獨再說??傊?,暫時不管這兩個包的詳細區別,以下就以新包為準,介紹下 redigo 包使用。

建立連接池

Redigo Pool 結構維護一個 Redis 連接池。應用程序調用 Get 方法從池中獲取連接,并使用連接的 Close 方法將連接的資源返回到池中。一般我們在系統初始化時聲明一個全局連接池,然后在需要操作 redis 時獲得連接,執行指令。

pool := &redis.Pool{    MaxIdle:   3, /*最大的空閑連接數*/    MaxActive:  8, /*最大的激活連接數*/    Dial: func() (redis.Conn, error) {      c, err := redis.Dial("tcp", '鏈接地址,例如127.0.0.1:6379', redis.DialPassword('密碼'))      if err != nil {        return nil, err      }      return c, nil    }}c:=pool.Get()defer c.Close()

執行指令

查看源碼,發現 Conn 接口有一個執行 Redis 命令的通用方法:

```//gomodule/redigo/redis/redis.go// Conn represents a connection to a Redis server.type Conn interface {// Close closes the connection.Close() error// Err returns a non-nil value when the connection is not usable.Err() error// Do sends a command to the server and returns the received reply.Do(commandName string, args ...interface{}) (reply interface{}, err error)// Send writes the command to the client's output buffer.Send(commandName string, args ...interface{}) error// Flush flushes the output buffer to the Redis server.Flush() error// Receive receives a single reply from the Redis serverReceive() (reply interface{}, err error)}```

http://redis.io/commands 中的 Redis 命令參考列出了可用的命令。 do 的參數和 redis-cli 命令參數格式一致,比如 SET key value EX 360 對應函數調用為 Do("SET", "key", "value","EX",360) ,常用的命令示例有:

c:=pool.Get()defer c.Close()//存值,_, err := c.Do("SET", "key", "value")//設置過期時間_, err := c.Do("SET", "key", "value","EX",360)//存int_, err := c.Do("SET", "key", 2)//取值v,err:=redis.String(c.Do("GET","key"))bytes, err := redis.Bytes(c.Do("GET", "key"))

總結

golang 中連接使用 redis 相對比較簡單,所以暫時也沒什么其他好說的,如果后面自己使用過程中發現有遺漏再進行補充,關鍵還是在于熟悉 redis-cli 原生的指令操作。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品爽片免费看久久| 国产亚洲精品综合一区91| 欧美洲成人男女午夜视频| 国产欧美日韩免费| 亚洲国产美女久久久久| 这里只有精品在线播放| 久久激情五月丁香伊人| 亚洲最新视频在线| 日韩高清a**址| 亚洲国产精品久久91精品| 国产91|九色| 国产一区二区三区在线免费观看| 色综合久久中文字幕综合网小说| 亚洲跨种族黑人xxx| 欧美精品一区二区免费| 国产在线精品成人一区二区三区| 亚洲最新中文字幕| 欧美激情一区二区三区在线视频观看| 亚洲精品98久久久久久中文字幕| 国产精品h片在线播放| 亚洲系列中文字幕| 欧美日韩国产综合视频在线观看中文| 国产成人亚洲精品| 久久精品久久久久久国产 免费| 高清欧美电影在线| 欧美激情视频一区二区三区不卡| 国产精品1区2区在线观看| 成人在线播放av| 国产亚洲人成a一在线v站| 97香蕉超级碰碰久久免费软件| 欧日韩在线观看| 亚洲色图18p| 欧美激情第三页| 久久久99久久精品女同性| 91夜夜未满十八勿入爽爽影院| 国产欧亚日韩视频| 91久久久久久久一区二区| 国产精品美女午夜av| 78色国产精品| 7777kkkk成人观看| 国产一区二区三区网站| 美日韩精品免费观看视频| 国产中文字幕日韩| 国产97色在线| 亚洲人成自拍网站| 欧美激情一二区| 国产精品一区专区欧美日韩| 欧美高跟鞋交xxxxhd| 一本一道久久a久久精品逆3p| 九九热最新视频//这里只有精品| 国产精品久久久久77777| 国产精品6699| 欧美专区日韩视频| 久久久噜噜噜久久久| 亚洲mm色国产网站| 亚洲综合最新在线| 最近2019中文免费高清视频观看www99| 91精品国产91久久久久久最新| 色噜噜狠狠狠综合曰曰曰88av| 亲子乱一区二区三区电影| 亚洲精品久久久久久下一站| 久久亚洲欧美日韩精品专区| 91久久综合亚洲鲁鲁五月天| 大荫蒂欧美视频另类xxxx| 亚洲爱爱爱爱爱| 97视频免费看| 欧美黑人巨大xxx极品| 国产精品视频网| 国产精品69精品一区二区三区| 人人爽久久涩噜噜噜网站| 国产精品pans私拍| 欧美性精品220| 久久久久久国产三级电影| 浅井舞香一区二区| 亚洲一区二区久久久久久久| 欧美国产日韩一区二区在线观看| 日韩精品视频中文在线观看| 日韩av在线网页| 另类美女黄大片| 91久久国产婷婷一区二区| 久久久久国产精品免费网站| 91精品久久久久久久久久另类| 久久6精品影院| 国产亚洲精品久久久久动| 亚洲一区亚洲二区| 中文字幕在线观看亚洲| 91久久精品国产91久久性色| 91精品视频观看| 一本色道久久88综合亚洲精品ⅰ| 色婷婷综合成人av| 亚洲mm色国产网站| 成人久久精品视频| 久久亚洲国产精品成人av秋霞| 91精品国产乱码久久久久久蜜臀| 日本精品久久中文字幕佐佐木| 国产精品久久久久久久久粉嫩av| 日韩av电影在线免费播放| 国产精品电影观看| 日韩电影中文字幕在线| 欧美—级高清免费播放| 国产亚洲视频在线观看| 疯狂做受xxxx高潮欧美日本| 欧美肥老妇视频| 成人免费观看49www在线观看| 136fldh精品导航福利| 18一19gay欧美视频网站| 欧洲成人免费aa| 2019中文字幕在线观看| 久久久噜噜噜久噜久久| 国产69精品久久久久久| 中文字幕日韩在线观看| 国产成人+综合亚洲+天堂| 日韩av电影国产| 亚洲天堂免费视频| 亚洲欧美制服第一页| 亚洲欧美一区二区三区情侣bbw| www.日韩av.com| 亚洲第一视频网站| 欧美高清视频在线播放| 欧美日韩国产一区二区三区| 国产一区二区三区三区在线观看| 成人精品久久av网站| 国产精品久久久久久久久久小说| 精品国产91久久久久久老师| 欧美激情免费观看| 久久久噜噜噜久久| 亚洲综合国产精品| 久久精品国产清自在天天线| 成人亚洲欧美一区二区三区| 国产成人jvid在线播放| 成人黄色生活片| 久久大大胆人体| 亚洲第一黄色网| 国产精品无码专区在线观看| 成人a级免费视频| 国产精品女视频| 成人综合网网址| 欧美人与性动交a欧美精品| 亚洲free性xxxx护士白浆| 亚洲自拍偷拍福利| 中文字幕亚洲欧美日韩在线不卡| 日韩视频免费在线观看| 色婷婷**av毛片一区| 久久亚洲国产精品成人av秋霞| 青青草原成人在线视频| 欧美极品少妇与黑人| 国产精品你懂得| 韩日精品中文字幕| 91沈先生作品| 91精品在线影院| 日本久久精品视频| 亚洲欧洲xxxx| 国产精品∨欧美精品v日韩精品| 亚洲性日韩精品一区二区| 亚洲日本成人网| 日本aⅴ大伊香蕉精品视频| 亚洲黄一区二区| 亚洲区中文字幕| 亚洲天堂视频在线观看| 欧美激情乱人伦一区| 精品国内亚洲在观看18黄| 国产欧美在线视频| 欧美大奶子在线| 欧美性开放视频|