婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL和Redis實(shí)現(xiàn)二級緩存的方法詳解

MySQL和Redis實(shí)現(xiàn)二級緩存的方法詳解

熱門標(biāo)簽:如何在高德地圖標(biāo)注新地址 寶應(yīng)電信400電話辦理費(fèi)用 高德地圖標(biāo)注模式 電銷機(jī)器人針對的 高德地圖標(biāo)注中心個人注冊 湘潭電銷機(jī)器人咨詢電話 400電話辦理都選易號網(wǎng) 外呼系統(tǒng)服務(wù) 外呼系統(tǒng)防封號違法嗎

redis簡介

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

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

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

優(yōu)勢

  • 性能極高 - Redis能讀的速度是110000次/s,寫的速度是81000次/s
  • 豐富的數(shù)據(jù)類型 – Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個操作是原子性的。多個操作也支持事務(wù),即原子性,通過MULTI和EXEC指令包起來

下載與安裝

下載并解壓縮

wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar xzf redis-5.0.3.tar.gz

將文件夾移動到/usr/local/中

mv redis-5.0.3 /usr/local/

進(jìn)入到文件夾中并編譯測試

cd /usr/local/redis-5.0.3
sudo make test

編譯安裝

sudo make install

啟動redis

redis-server

mysql與redis做二級緩存

對于訪問量比較大的數(shù)據(jù)我們?yōu)榱四軌蚋斓墨@取到數(shù)據(jù)需要對數(shù)據(jù)庫中獲取的數(shù)據(jù)進(jìn)行數(shù)據(jù)緩存。

在項(xiàng)目當(dāng)中使用Redis緩存流程

  • 查詢時先從緩存當(dāng)中查詢
  • 緩存當(dāng)中如果沒有數(shù)據(jù)再從數(shù)據(jù)庫查詢,并將數(shù)據(jù)保存進(jìn)緩存當(dāng)中
  • 如果緩存中查詢到了數(shù)據(jù)直接返回,不再需要查詢數(shù)據(jù)庫

數(shù)據(jù)緩存應(yīng)該考慮同步問題:如果對數(shù)據(jù)進(jìn)行了緩存,當(dāng)查詢數(shù)據(jù)時,如果緩存中有數(shù)據(jù)則直接返回緩存數(shù)據(jù)不會查詢數(shù)據(jù)庫,當(dāng)數(shù)據(jù)庫數(shù)據(jù)改變的時候就有可能出現(xiàn)數(shù)據(jù)庫不一致的問題??梢钥紤]在每次修改數(shù)據(jù)庫的時候同時將對應(yīng)的緩存數(shù)據(jù)刪除,這樣重新查詢的時候就會查詢數(shù)據(jù)庫并緩存

步驟實(shí)現(xiàn)

創(chuàng)建redisPool.go文件用于連接池的初始化

package redigo_pool

import (
 "flag"
 "github.com/garyburd/redigo/redis"
 "time"
)
var (
 Pool *redis.Pool
 RedisServer = flag.String("redisServer", ":6379", "")
 
)
func init() {
 Pool = redis.Pool{
  MaxIdle:  3, //最大空閑鏈接數(shù),表示即使沒有redis鏈接事依然可以保持N個空閑鏈接,而不被清除
  MaxActive: 3, //最大激活連接數(shù),表示同時最多有多少個鏈接
  IdleTimeout: 240 * time.Second,//最大空閑鏈接等待時間,超過此時間,空閑將被關(guān)閉
  Dial: func() (redis.Conn, error) {
   c, err := redis.Dial("tcp", *RedisServer)
   if err != nil {
    return nil, err
   }
   return c, err
  },
  TestOnBorrow: func(c redis.Conn, t time.Time) error {
   if time.Since(t)  time.Minute {
    return nil
   }
   _, err := c.Do("PING")
   return err
  },
 }
}

創(chuàng)建main.go文件實(shí)現(xiàn)二級緩存

package main

import (
 "database/sql"
 "encoding/json"
 "fmt"
 "github.com/garyburd/redigo/redis"
 _ "github.com/go-sql-driver/mysql"
 "strconv"
 "web/redis/redigo_pool"
 _ "web/redis/redigo_pool"
)

type Person struct {
 Id int `db:"id"`
 Name string `db:"name"`
 Age int `db:"age"`
 Rmb int `db:"rmb"`
}

func main() {
 var cmd string
 for{
  fmt.Println("輸入命令")
  fmt.Scan(cmd)
  switch cmd {
  case "getall":
   getAll()
  default:
   fmt.Println("不能識別其他命令")
  }
  fmt.Println()
 }
}

func getAll() {
 //從連接池當(dāng)中獲取鏈接
 conn := redigo_pool.Pool.Get()
 //先查看redis中是否有數(shù)據(jù)
 //conn,_ :=redis.Dial("tcp","localhost:6379")
 defer conn.Close()
 values, _ := redis.Values(conn.Do("lrange", "mlist",0,-1))

 if len(values) > 0 {
  //如果有數(shù)據(jù)
  fmt.Println("從redis獲取數(shù)據(jù)")
  //從redis中直接獲取
  for _,key := range values{
   pid :=string(key.([]byte))
   id ,_:= strconv.Atoi(pid)
   results,_ := redis.Bytes(conn.Do("GET",id))
   var p Person
   err := json.Unmarshal(results,p)
   if err != nil {
    fmt.Println("json 反序列化出錯")
   }else {
    fmt.Printf("name = %s\n",p.Name)
   }
  }
 }else {
  fmt.Println("從mysql中獲取")

  //查詢數(shù)據(jù)庫
  db,_ := sql.Open("mysql","root:Szt930708@tcp(localhost:3306)/mydb")
  defer db.Close()

  var persons []Person

  rows,_ := db.Query("select id,name,age,rmb from person")
  for rows.Next() {
   var id int
   var name string
   var age int
   var rmb int
   rows.Scan(id,name,age,rmb)
   per := Person{id,name,age,rmb}
   persons = append(persons,per)

  }
  //寫入到redis中:將person以hash的方式寫入到redis中
  for _,p := range persons{

   p_byte,_ := json.Marshal(p)
   _,err1 := conn.Do("SETNX",p.Id,p_byte)
   _,err2 := conn.Do("lpush","mlist",p.Id)
   // 設(shè)置過期時間
   conn.Do("EXPIRE",p.Id,60*5)
   if err1 != nil || err2 != nil {
    fmt.Println("寫入失敗")
   }else {
    fmt.Println("寫入成功")
   }
  }
  conn.Do("EXPIRE","mlist",60*5)
 }
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • MySQL的查詢緩存和Buffer Pool
  • mysqldump造成Buffer Pool污染的研究
  • redis服務(wù)器環(huán)境下mysql實(shí)現(xiàn)lnmp架構(gòu)緩存
  • mysql select緩存機(jī)制使用詳解
  • MySQL緩存的查詢和清除命令使用詳解
  • PHP使用redis實(shí)現(xiàn)統(tǒng)計(jì)緩存mysql壓力的方法
  • MySQL高速緩存啟動方法及參數(shù)詳解(query_cache_size)
  • 清空mysql 查詢緩存的可行方法
  • 使用Memcache緩存mysql數(shù)據(jù)庫操作的原理和緩存過程淺析
  • 詳解MySQL中的緩沖池(buffer pool)

標(biāo)簽:黃山 蘭州 南充 馬鞍山 黔南 宿遷 佛山 賀州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL和Redis實(shí)現(xiàn)二級緩存的方法詳解》,本文關(guān)鍵詞  MySQL,和,Redis,實(shí)現(xiàn),二級,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL和Redis實(shí)現(xiàn)二級緩存的方法詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL和Redis實(shí)現(xiàn)二級緩存的方法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    99久久综合国产精品| 欧美在线高清视频| 国产一区二区福利视频| 丁香婷婷综合激情五月色| 欧美浪妇xxxx高跟鞋交| 亚洲男人的天堂网| 日本亚洲天堂网| 欧美日韩国产系列| 综合色天天鬼久久鬼色| 波多野洁衣一区| 伊人性伊人情综合网| 欧美高清dvd| 日本伊人色综合网| 久久精品国产999大香线蕉| 国产精品一二三区在线| 欧美精品在线视频| 欧美精品一区二区三区久久久| 国产成人综合精品三级| 7777精品伊人久久久大香线蕉完整版 | 精品一区二区三区在线观看 | 欧美一级夜夜爽| 亚洲成人1区2区| 老司机免费视频一区二区| 日韩中文欧美在线| 国产99久久久国产精品潘金| 欧美日韩中字一区| 国产精品久久久久三级| 国产黄色成人av| 日韩免费在线观看| 国产91富婆露脸刺激对白| 欧美人狂配大交3d怪物一区| 亚洲精品视频一区| 欧美一区午夜视频在线观看| 国产一区二区女| 亚洲欧洲日韩一区二区三区| 日本乱人伦一区| 国产欧美日韩中文久久| 亚洲一区二区三区精品在线| 亚洲妇熟xx妇色黄| 欧美日韩国产a| 精品久久久久久久人人人人传媒 | 亚洲一区二区中文在线| 日韩激情一区二区| 另类综合日韩欧美亚洲| 欧美专区在线观看一区| 欧美大片顶级少妇| 26uuu成人网一区二区三区| 欧美一区二区三区视频在线| 福利电影一区二区三区| 91视频国产资源| 日韩一区在线免费观看| 成人av资源在线| 亚洲日穴在线视频| 日韩欧美的一区二区| 风间由美中文字幕在线看视频国产欧美| 精品国精品国产尤物美女| 免费看欧美女人艹b| 国产欧美精品一区二区三区四区 | 韩国女主播成人在线观看| 中文字幕第一区二区| 91在线精品秘密一区二区| 亚洲国产精品精华液网站| 久久久亚洲精华液精华液精华液| 成人白浆超碰人人人人| 蜜臂av日日欢夜夜爽一区| 国产精品久久久久久久久搜平片| 欧美猛男gaygay网站| 成人av片在线观看| 狠狠狠色丁香婷婷综合激情| 亚洲成人综合在线| 国产精品一区免费视频| 亚洲国产精品一区二区久久恐怖片| 一区二区三区中文字幕| 蜜臀av一级做a爰片久久| 国产a久久麻豆| 在线精品国精品国产尤物884a| 日韩精品中午字幕| 91在线观看视频| 欧美tickling挠脚心丨vk| 国产精品99久久久久久久女警 | 一区二区三区四区不卡视频| 日韩午夜av一区| 色婷婷一区二区三区四区| 亚洲曰韩产成在线| 一区二区三区在线视频观看| 色综合天天性综合| 亚洲精品综合在线| 国产成人在线网站| 天天影视色香欲综合网老头| 中文字幕在线不卡| 中文字幕中文字幕一区| 综合av第一页| 中文字幕制服丝袜一区二区三区| 国产精品免费av| 亚洲女与黑人做爰| 美女在线视频一区| 91一区一区三区| 精品国产乱码久久久久久免费| 日韩一区二区三区观看| 成人黄色片在线观看| 日韩中文欧美在线| 日韩电影在线观看电影| 国产美女主播视频一区| 97久久精品人人做人人爽 | 午夜精品久久久久久久| 国产一区二区三区综合| 91亚洲国产成人精品一区二区三| 18成人在线视频| 制服丝袜日韩国产| 欧美一激情一区二区三区| 91精品福利在线一区二区三区| 狠狠久久亚洲欧美| 国产精品私人影院| 国产a视频精品免费观看| 欧美一卡二卡三卡| 国产一区三区三区| 国产日韩欧美精品综合| 亚洲电影第三页| 国产福利一区二区三区在线视频| 99视频在线精品| 精品国产露脸精彩对白| 日韩—二三区免费观看av| 国产成人综合视频| 久久综合999| 午夜av电影一区| 精品国产三级a在线观看| 日韩欧美国产小视频| 国产.欧美.日韩| 在线观看国产一区二区| 91片在线免费观看| 亚洲成人一区在线| 韩国欧美一区二区| www.亚洲在线| 精品嫩草影院久久| 国产成人av影院| 国产成人亚洲精品青草天美| 在线亚洲+欧美+日本专区| 国产精品视频观看| 日韩精品福利网| 久久人人97超碰com| 91国偷自产一区二区使用方法| 中文字幕一区二区三区色视频| 成人国产在线观看| 国内成人精品2018免费看| 国产午夜精品久久久久久久| 日韩国产一二三区| 中文字幕一区二区三区视频| 麻豆91精品91久久久的内涵| 五月天视频一区| 在线国产亚洲欧美| 国产精品1区2区3区在线观看| 一区二区三区蜜桃| 日韩欧美中文字幕公布| 91一区二区在线| 色狠狠桃花综合| 成人av在线资源网站| 国产精品国产三级国产普通话蜜臀 | 成人激情免费电影网址| 精品欧美一区二区在线观看| 欧美精品一级二级三级| 91久久精品午夜一区二区| 色综合久久中文综合久久97 | aaa欧美色吧激情视频| 欧美日韩第一区日日骚| 成人午夜av电影| 亚洲午夜av在线| 久久一区二区三区四区| 日本韩国一区二区三区视频| 韩国精品久久久| 极品美女销魂一区二区三区| 午夜精品福利在线| 国产精品电影一区二区| 日韩欧美123| 粉嫩av一区二区三区| 亚洲人成人一区二区在线观看 | 奇米影视7777精品一区二区| 成人晚上爱看视频| 三级一区在线视频先锋| 色狠狠一区二区| 一本久久精品一区二区| 国产91综合一区在线观看| 国产成人在线电影| 99精品一区二区三区| 欧美无砖专区一中文字| 在线不卡欧美精品一区二区三区| 欧美一区二区在线播放| 中文字幕av资源一区| 亚洲午夜成aⅴ人片| 奇米精品一区二区三区在线观看一| 亚洲同性gay激情无套| 日日夜夜精品免费视频| 色婷婷久久一区二区三区麻豆| 久久久精品免费免费| 免费成人av在线| 欧美日本免费一区二区三区| 国产三级三级三级精品8ⅰ区| 亚洲高清三级视频| 日本精品一区二区三区高清 | 色综合久久66| 国产精品视频观看|