欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一. Redis介紹

1.1 簡(jiǎn)介

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

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

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

1.2 Redis優(yōu)勢(shì)

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

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

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

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

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è)置過期時(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è)置過期時(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隊(duì)列操作

七.  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表示自動(dòng)定義),按需分配
		IdleTimeout: 300, //連接關(guān)閉時(shí)間300秒,(300秒內(nèi)不使用自動(dòng)關(guān)閉)
		Dial: func() (redis.Conn, error) { //要連接的數(shù)據(jù)庫
			return redis.Dial("tcp", "127.0.0.1:6379")
		},
	}
}

func main() {
	c := pool.Get() //從連接池中取一個(gè)連接
	_, 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的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Golang操作Redis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang中一種不常見的switch語句寫法示例詳解

    golang中一種不常見的switch語句寫法示例詳解

    這篇文章主要介紹了golang中一種不常見的switch語句寫法,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • 深入了解Golang的map增量擴(kuò)容

    深入了解Golang的map增量擴(kuò)容

    這篇文章主要介紹了深入了解Golang的map增量擴(kuò)容,擴(kuò)容的主要目的是為了縮短map容器的響應(yīng)時(shí)間。增量擴(kuò)容的本質(zhì)其實(shí)就是將總的擴(kuò)容時(shí)間分?jǐn)偟搅嗣恳淮蝖ash操作上,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • Go語言中init函數(shù)與匿名函數(shù)使用淺析

    Go語言中init函數(shù)與匿名函數(shù)使用淺析

    這篇文章主要介紹了Go語言中init函數(shù)與匿名函數(shù)使用淺析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • Go語言學(xué)習(xí)之goroutine詳解

    Go語言學(xué)習(xí)之goroutine詳解

    Goroutine是建立在線程之上的輕量級(jí)的抽象。它允許我們以非常低的代價(jià)在同一個(gè)地址空間中并行地執(zhí)行多個(gè)函數(shù)或者方法,這篇文章主要介紹了Go語言學(xué)習(xí)之goroutine的相關(guān)知識(shí),需要的朋友可以參考下
    2020-02-02
  • 使用Go和Tesseract實(shí)現(xiàn)驗(yàn)證碼識(shí)別的流程步驟

    使用Go和Tesseract實(shí)現(xiàn)驗(yàn)證碼識(shí)別的流程步驟

    驗(yàn)證碼主要用于區(qū)分人類用戶和機(jī)器程序,Tesseract 是一個(gè)開源的光學(xué)字符識(shí)別(OCR)引擎,支持多種語言和字體,并具有較高的識(shí)別準(zhǔn)確率,它由 Google 維護(hù),并且可以通過多種編程語言調(diào)用,本文給大家介紹了使用Go和Tesseract實(shí)現(xiàn)驗(yàn)證碼識(shí)別的流程步驟
    2025-01-01
  • 如何使用?Go?獲取你的?IP?地址(推薦)

    如何使用?Go?獲取你的?IP?地址(推薦)

    在Go語言中,獲取IP地址分為公共IP和私有IP兩種方式,公共IP地址通過外部API獲取,本文給大家介紹如何使用?Go?獲取你的?IP?地址,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • golang實(shí)現(xiàn)大文件上傳功能全過程

    golang實(shí)現(xiàn)大文件上傳功能全過程

    Go語言可以用來實(shí)現(xiàn)大文件傳輸,下面這篇文章主要給大家介紹了關(guān)于golang實(shí)現(xiàn)大文件上傳功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Go語言中new()和 make()的區(qū)別詳解

    Go語言中new()和 make()的區(qū)別詳解

    這篇文章主要介紹了Go語言中new()和 make()的區(qū)別詳解,本文講解了new 的主要特性、make 的主要特性,并對(duì)它們的區(qū)別做了總結(jié),需要的朋友可以參考下
    2014-10-10
  • Go語言如何使用golang-jwt/jwt/v4進(jìn)行JWT鑒權(quán)詳解

    Go語言如何使用golang-jwt/jwt/v4進(jìn)行JWT鑒權(quán)詳解

    最近項(xiàng)目中需要用到鑒權(quán)機(jī)制,golang中jwt可以用,這篇文章主要給大家介紹了關(guān)于Go語言如何使用golang-jwt/jwt/v4進(jìn)行JWT鑒權(quán)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Go語言單向通道的實(shí)現(xiàn)

    Go語言單向通道的實(shí)現(xiàn)

    本文主要介紹了Go語言單向通道的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論