最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang操作Redis的實現(xiàn)示例

 更新時間:2025年11月07日 11:32:47   作者:兩片空白  
本文介紹了Redis作為高性能key-value數(shù)據(jù)庫的特性,包括數(shù)據(jù)持久化、豐富的數(shù)據(jù)結(jié)構(gòu)、高并發(fā)性能、原子操作以及連接池管理,通過實例展示了使用Redis進行String、List和Hash操作,以及設(shè)置過期時間和連接池的管理,感興趣的可以了解一下

一. Redis介紹

1.1 簡介

Redis是完全開源免費的,遵循BSD協(xié)議,是一個高性能的key-value數(shù)據(jù)庫。

Redis與其它的key-value緩存產(chǎn)品有以下三個特點:

  • Redis支持?jǐn)?shù)據(jù)持久化,可以見內(nèi)存中的數(shù)據(jù)報錯在磁盤中,重啟的時候可以再次加載進行使用。
  • Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供string,list(鏈表),set(集合),hash表等數(shù)據(jù)結(jié)構(gòu)的存儲。
  • Redis支持?jǐn)?shù)據(jù)備份,即master-slave模式的數(shù)據(jù)備份。

1.2 Redis優(yōu)勢

  • 性能極高——Redis能讀的速度是110000次/秒,寫的速度是81000次/秒,單機可以達到15w qps,通常適合做緩存。
  • 豐富的數(shù)據(jù)類型——Redis支持二進制案例的strings,lists,hashes,sets及ordered sets數(shù)據(jù)類型操作。
  • 原子——Redis的所有操作都是原子的,意思就是要么成功執(zhí)行,要么失敗完全不執(zhí)行。單個操作是原子的。多操作也支持事務(wù),即原子性,通過MULTI和EXEC指令包起來。
  • 豐富的特性——Redis還支持publish/subscribe,通知,key過期等特性。

Redis與其它的key-value存儲有什么不同?

Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對他們的原子操作,這是一個不同于其它數(shù)據(jù)庫的進化路徑。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時對程序員透明,無需進行額外的抽象。

Redis運行在內(nèi)存中但是可以持久化到磁盤,所以對不同數(shù)據(jù)集進行高速讀寫時需要權(quán)衡內(nèi)存,因為數(shù)據(jù)量不能大于內(nèi)存大小。在內(nèi)存數(shù)據(jù)庫方面的另一個優(yōu)點是,相比在磁盤上相同的復(fù)雜數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來簡單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生,因為他們不需要進行隨機訪問。

1.3 redis的使用

使用第三方開源的redis庫:github.com/garyburd/redigo/redis

命令行輸入:

go get github.com/garyburd/redigo/redis

二. 鏈接Redis

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("conn redis fail ", err)
		return
	}
	defer c.Close()

	fmt.Println("conn redis succ")
}

三. String類型的Set,Get操作

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("conn redis fail ", err)
		return
	}
	defer c.Close()

	_, err = c.Do("Set", "abc", 100)
	if err != nil {
		fmt.Println("set fail", err)
		return
	}

	//將返回結(jié)果轉(zhuǎn)為int類型
	r, err := redis.Int(c.Do("Get", "abc"))
	if err != nil {
		fmt.Println("get fail", err)
		return
	}
	fmt.Println(r)
}

         輸出結(jié)果:

        命令行輸出:

四. String批量操作

五. 設(shè)置過期時間

package main

import (
	"fmt"
	"time"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("conn redis fail ", err)
		return
	}
	defer c.Close()

	_, err = c.Do("set", "k1", 1)
	if err != nil {
		fmt.Println("set fail ", err)
		return
	}
	//設(shè)置過期時間10秒
	_, err = c.Do("expire", "k1", 10)
	if err != nil {
		fmt.Println("expire fail", err)
		return
	}

	r, err := redis.Int(c.Do("get", "k1"))
	if err != nil {
		fmt.Println("get fail ", err)
		return
	}
	fmt.Printf("k1=%d\n", r)

	time.Sleep(10 * time.Second)
	//過10秒已經(jīng)過期 再獲得失敗
	r, err = redis.Int(c.Do("get", "k1"))
	if err != nil {
		fmt.Println("get fail ", err)
		return
	}
	fmt.Printf("k1=%d\n", r)
}

輸出:

六. List隊列操作

七.  Hash表

八. Redis連接池

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

var pool *redis.Pool

func init() {
	pool = &redis.Pool{
		MaxIdle: 16, //最初的連接數(shù)量
		//MaxActive: 1000000, //最大連接數(shù)量
		MaxActive:   0,   //連接池最大連接數(shù)量,不確定可以使用0(0表示自動定義),按需分配
		IdleTimeout: 300, //連接關(guān)閉時間300秒,(300秒內(nèi)不使用自動關(guān)閉)
		Dial: func() (redis.Conn, error) { //要連接的數(shù)據(jù)庫
			return redis.Dial("tcp", "127.0.0.1:6379")
		},
	}
}

func main() {
	c := pool.Get() //從連接池中取一個連接
	_, err := c.Do("set", "k1", "v1")
	if err != nil {
		fmt.Println("set fail ", err)
		return
	}

	v, err := redis.String(c.Do("get", "k1"))
	if err != nil {
		fmt.Println("get fail ", err)
		return
	}
	fmt.Println(v)
	pool.Close() //關(guān)閉連接池
}

到此這篇關(guān)于Golang操作Redis的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Golang操作Redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang 配置和啟動 HTTPS 服務(wù)器

    Golang 配置和啟動 HTTPS 服務(wù)器

    golang-https-example 是一個展示如何在 Go 語言中實現(xiàn) HTTPS 服務(wù)器的開源項目,該項目通過簡單的代碼示例,幫助開發(fā)者理解如何在 Go 中配置和啟動一個 HTTPS 服務(wù)器,下面就來詳細(xì)的介紹一下
    2026-05-05
  • Go語言實現(xiàn)棧與隊列基本操作學(xué)家

    Go語言實現(xiàn)棧與隊列基本操作學(xué)家

    go語言中,并沒有棧與隊列相關(guān)的數(shù)據(jù)結(jié)構(gòu),但是我們可以借助切片來實現(xiàn)棧與隊列的操作;接下來我們一起實現(xiàn)棧與隊列基本操作,感興趣的可以了解一下
    2022-11-11
  • Go語言zip文件的讀寫操作

    Go語言zip文件的讀寫操作

    本文主要介紹了Go語言zip文件的讀寫操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Go語言fmt包的具體使用

    Go語言fmt包的具體使用

    Go語言的fmt包提供了豐富多樣的輸入輸出功能,無論是格式化輸出、文件寫入,還是從各種輸入源讀取數(shù)據(jù),都能輕松應(yīng)對,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • GoLand安裝與環(huán)境配置的完整步驟

    GoLand安裝與環(huán)境配置的完整步驟

    作為一個go語言程序員,覺得自己有義務(wù)為go新手開一條更簡單便捷的上手之路,下面這篇文章主要給大家介紹了關(guān)于GoLand安裝與環(huán)境配置的完整步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • 深入理解Go語言設(shè)計模式之函數(shù)式選項模式

    深入理解Go語言設(shè)計模式之函數(shù)式選項模式

    在 Go 語言中,函數(shù)選項模式(Function Options Pattern)是一種常見且強大的設(shè)計模式,用于構(gòu)建可擴展、易于使用和靈活的 API,本文就來看看它的具體用法吧
    2023-05-05
  • Golang?urfave/cli庫簡單應(yīng)用示例詳解

    Golang?urfave/cli庫簡單應(yīng)用示例詳解

    這篇文章主要為大家介紹了Golang?urfave/cli庫簡單應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Go語言中函數(shù)可變參數(shù)(Variadic Parameter)詳解

    Go語言中函數(shù)可變參數(shù)(Variadic Parameter)詳解

    在Python中,在函數(shù)參數(shù)不確定數(shù)量的情況下,可以動態(tài)在函數(shù)內(nèi)獲取參數(shù)。在Go語言中,也有類似的實現(xiàn)方式,本文就來為大家詳細(xì)講解一下
    2022-07-07
  • Gin的中間件執(zhí)行流程與用法詳解

    Gin的中間件執(zhí)行流程與用法詳解

    我們在使用Gin框架進行Web開發(fā)的時候,基本上都會遇到登錄攔截的場景,在Gin當(dāng)中,?中間件和業(yè)務(wù)處理函數(shù)都是一樣的類型,都是一種函數(shù),本文給大家介紹了Gin的中間件執(zhí)行流程與用法,需要的朋友可以參考下
    2024-04-04
  • Golang讀寫Excel的方法教程

    Golang讀寫Excel的方法教程

    這篇文章主要給大家介紹了關(guān)于Golang讀寫Excel的方法教程,golang操作excel利用的是Excelize,Excelize是Golang編寫的一個用來操作 Office Excel 文檔類庫,基于微軟的Office OpenXML標(biāo)準(zhǔn),文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05

最新評論

江西省| 阿克| 肥城市| 台南市| 甘洛县| 广丰县| 宜城市| 玉树县| 黎川县| 盱眙县| 罗定市| 安宁市| 邵武市| 平武县| 澄江县| 南岸区| 略阳县| 广南县| 西充县| 页游| 井冈山市| 万年县| 霍邱县| 汾西县| 龙陵县| 信阳市| 阳信县| 郑州市| 河东区| 江油市| 宿迁市| 科技| 托里县| 甘谷县| 若尔盖县| 汕头市| 苏尼特左旗| 青铜峡市| 宜川县| 庆城县| 龙海市|