千家信息网

怎么在MySQL和Redis中实现二级缓存

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关怎么在MySQL和Redis中实现二级缓存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。redis简介Redis 是完全开源免费的
千家信息网最后更新 2026年11月02日怎么在MySQL和Redis中实现二级缓存

这期内容当中小编将会给大家带来有关怎么在MySQL和Redis中实现二级缓存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

redis简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用

  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储

  • Redis支持数据的备份,即master-slave模式的数据备份

优势

  • 性能极高 - Redis能读的速度是110000次/s,写的速度是81000次/s

  • 丰富的数据类型 - Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作

  • 原子 - Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来

下载与安装

下载并解压缩

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

将文件夹移动到/usr/local/中

mv redis-5.0.3 /usr/local/

进入到文件夹中并编译测试

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

编译安装

sudo make install

启动redis

redis-server

mysql与redis做二级缓存

对于访问量比较大的数据我们为了能够更快的获取到数据需要对数据库中获取的数据进行数据缓存。

在项目当中使用Redis缓存流程

  • 查询时先从缓存当中查询

  • 缓存当中如果没有数据再从数据库查询,并将数据保存进缓存当中

  • 如果缓存中查询到了数据直接返回,不再需要查询数据库

数据缓存应该考虑同步问题:如果对数据进行了缓存,当查询数据时,如果缓存中有数据则直接返回缓存数据不会查询数据库,当数据库数据改变的时候就有可能出现数据库不一致的问题。可以考虑在每次修改数据库的时候同时将对应的缓存数据删除,这样重新查询的时候就会查询数据库并缓存

步骤实现

创建redisPool.go文件用于连接池的初始化

package redigo_poolimport ( "flag" "github.com/garyburd/redigo/redis" "time")var ( Pool *redis.Pool RedisServer = flag.String("redisServer", ":6379", "") )func init() { Pool = &redis.Pool{  MaxIdle:  3, //最大空闲链接数,表示即使没有redis链接事依然可以保持N个空闲链接,而不被清除  MaxActive: 3, //最大激活连接数,表示同时最多有多少个链接  IdleTimeout: 240 * time.Second,//最大空闲链接等待时间,超过此时间,空闲将被关闭  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  }, }}

创建main.go文件实现二级缓存

package mainimport ( "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() { //从连接池当中获取链接 conn := redigo_pool.Pool.Get() //先查看redis中是否有数据 //conn,_ :=redis.Dial("tcp","localhost:6379") defer conn.Close() values, _ := redis.Values(conn.Do("lrange", "mlist",0,-1)) if len(values) > 0 {  //如果有数据  fmt.Println("从redis获取数据")  //从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中获取")  //查询数据库  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)   // 设置过期时间   conn.Do("EXPIRE",p.Id,60*5)   if err1 != nil || err2 != nil {    fmt.Println("写入失败")   }else {    fmt.Println("写入成功")   }  }  conn.Do("EXPIRE","mlist",60*5) }}

上述就是小编为大家分享的怎么在MySQL和Redis中实现二级缓存了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

数据 缓存 查询 数据库 链接 支持 原子 文件 时候 空闲 最大 同时 时间 类型 中实 成功 内容 命令 备份 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 博彦科技互联网金融 广州紫鲸互联网科技有限公司 盈实互联网科技 科技制造互联网公司 成都玖崟互联网科技有限公司乐商圈怎么样 字节跳动和互联网科技 互联网大会黑科技排名 互联网科技商业 亳州好赞互联网科技有限公司 工业互联网等科技实现智能化赋能 互联网领先科技宣传片 山东大美朱楼互联网科技有限公司 新氧科技和美国互联网有关系吗 宁波跨境商互联网科技有限公司 互联网科技接地气 广西泛欧互联网科技有限公司 盐城市攀科互联网科技有限公司 山东蛋芒互联网科技有限公司 科技发展第三阶段互联网时代 互联网和科技创新 科技类互联网 互联网未来科技 科技互联网创业计划书 西藏七维空间互联网科技有限公司 崇明区互联网教育科技诚信经营 民营互联网公司国防科技 互联网硬科技公司 北京品多多互联网科技有限公司 上海互联网科技园景观
0