返回顶部
首页 > 资讯 > 数据库 >MySQL与Redis实现二级缓存的方法是什么
  • 494
分享到

MySQL与Redis实现二级缓存的方法是什么

2024-04-02 19:04:59 494人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关Mysql与Redis实现二级缓存的方法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。redis简介Redis 是完全开源免费的,遵守B

这篇文章将为大家详细讲解有关MysqlRedis实现二级缓存的方法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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.gz
tar xzf redis-5.0.3.tar.gz
  • 将文件夹移动到/usr/local/中

mv redis-5.0.3 /usr/local/
  • 进入到文件夹中并编译测试

cd /usr/local/redis-5.0.3
sudo make test
  • 编译安装

sudo make install
  • 启动redis

redis-server

若出现以下画面则表示redis数据库已经启动了:
jpg

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

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

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

    1. 查询时先从缓存当中查询

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

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

步骤实现
  • 创建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, //最大空闲链接数,表示即使没有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 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()  {
    //从连接池当中获取链接
    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实现二级缓存的方法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL与Redis实现二级缓存的方法是什么

本文链接: https://lsjlt.com/news/52611.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL与Redis实现二级缓存的方法是什么
    这篇文章将为大家详细讲解有关MySQL与Redis实现二级缓存的方法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。redis简介Redis 是完全开源免费的,遵守B...
    99+
    2024-04-02
  • Mybatis 一级缓存与二级缓存的实现
    mybatis缓存 mybatis作为一个流行的持久化工具,缓存必然是缺少不了的组件。通过这篇文章,就让我们来了解一下mybatis的缓存。 mybatis缓存类型 说起mybati...
    99+
    2024-04-02
  • 怎么在MySQL和Redis中实现二级缓存
    这期内容当中小编将会给大家带来有关怎么在MySQL和Redis中实现二级缓存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。redis简介Redis 是完全开源免费的,遵守...
    99+
    2024-04-02
  • MyBatis一级缓存与二级缓存原理与作用是什么
    这篇“MyBatis一级缓存与二级缓存原理与作用是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MyBatis一级缓存与...
    99+
    2023-07-04
  • java二级缓存的实现原理是什么
    Java二级缓存是一种应用级缓存,它通过将数据存储在内存中,以减少对底层数据源的访问次数,提高数据访问的性能。实现Java二级缓存的...
    99+
    2023-10-09
    java
  • redis实现清空缓存的方法是什么
    这篇文章主要介绍“redis实现清空缓存的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“redis实现清空缓存的方法是什么”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • mybatis一级缓存和二级缓存是什么
    mybatis一级缓存和二级缓存是mybatis提供的两种不同层次的缓存机制,一级缓存是mybatis中默认开启的缓存机制,它是基于线程的本地缓存,二级缓存是基于namespace级别的缓存,可以被多个SqlSession对象共享。本教程操...
    99+
    2023-08-09
  • Java Mybatis一级缓存和二级缓存是什么
    本篇内容主要讲解“Java Mybatis一级缓存和二级缓存是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Mybatis一级缓存和二级缓存是什么”吧!一、什么...
    99+
    2023-07-05
  • 使用MyBatis如何实现一级缓存与二级缓存
    这期内容当中小编将会给大家带来有关使用MyBatis如何实现一级缓存与二级缓存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MyBatis缓存我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB...
    99+
    2023-05-31
    mybatis 一级缓存 二级缓存
  • PHP+Redis缓存的方法是什么
    本篇内容主要讲解“PHP+Redis缓存的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP+Redis缓存的方法是什么”吧!有否想过PHP使用redis作为缓存时,如何能:前后台模...
    99+
    2023-06-26
  • 基于Spring Cache实现Caffeine+Redis二级缓存
    目录一、聊聊什么是硬编码使用缓存?二、Spring Cache简介1、Cache接口2、CacheManager接口3、常用注解说明三、使用二级缓存需要思考的一些问题?四、Caffe...
    99+
    2024-04-02
  • Redis的缓存预热和缓存降级是什么
    Redis的缓存预热是指在系统启动或者服务升级时,提前将一些热门或者常用的数据加载到缓存中,以提高系统性能和响应速度。通过缓存预热,...
    99+
    2024-05-07
    Redis
  • MybatisPlus二级缓存怎么实现
    这篇文章主要介绍了MybatisPlus二级缓存怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MybatisPlus二级缓存怎么实现文章都会有所收获,下面我们一起来看看吧。一、序言本文承接[Mybati...
    99+
    2023-06-29
  • java二级缓存怎么实现
    Java二级缓存的实现可以通过使用第三方缓存库或自定义缓存类来完成。1. 使用第三方缓存库:常见的第三方缓存库有Ehcache、Re...
    99+
    2023-08-20
    java
  • mybatis二级缓存的原理是什么
    MyBatis的二级缓存是指缓存在SqlSessionFactory级别的缓存,可以被多个SqlSession共享。其原理如下:1....
    99+
    2023-10-09
    mybatis
  • hibernate二级缓存机制是什么
    Hibernate二级缓存机制是指在Hibernate框架中,通过配置第二级缓存来缓存对象的持久化状态,提高数据库访问性能。Hibe...
    99+
    2023-08-24
    hibernate
  • MySQL与redis缓存怎么实现同步
    MySQL与redis缓存怎么实现同步?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、方案1(UDF)场景分析:当我们对MySQL数据库进行数据操作时,同时将...
    99+
    2023-06-14
  • Redis+Caffeine两级缓存的实现
    目录优点与问题准备工作V1.0版本V2.0版本V3.0版本在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没...
    99+
    2022-06-22
    RedisCaffeine两级缓存 RedisCaffeine缓存
  • 基于Spring Cache如何实现Caffeine+Redis二级缓存
    这篇文章主要为大家展示了“基于Spring Cache如何实现Caffeine+Redis二级缓存”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于Spring Cache如...
    99+
    2023-06-29
  • linux清理redis缓存的方法是什么
    清理Redis缓存的方法有以下几种: 使用Redis自带的命令:可以使用FLUSHALL命令来清空当前Redis实例中的所有数据...
    99+
    2024-04-15
    linux redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作